Skip to content

Latest commit

ย 

History

History
352 lines (188 loc) ยท 13.3 KB

Android Testing.md

File metadata and controls

352 lines (188 loc) ยท 13.3 KB

์•ˆ๋“œ๋กœ์ด๋“œ ํ…Œ์ŠคํŒ…

Android ๋‹จ์œ„ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•˜์—ฌ

์ž‘์„ฑ์ž : ๋ฐ•ํƒœ์ž„

Present Time : 2018โ€“06-27-WED

Last Updated :



1. ํ…Œ์ŠคํŠธ๊ฐ€ ๋ญ์ฅฌ?

1.1 ํ…Œ์ŠคํŠธ๋ž€?

ํ…Œ์ŠคํŠธ์˜ ์‚ฌ์ „์  ์˜๋ฏธ

  • ์ œํ’ˆ์˜ ์„ฑ๋Šฅ์ด๋‚˜ ์ƒํƒœ ๋”ฐ์œ„๋ฅผ ์ผ์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ๊ฒ€์‚ฌํ•จ.

  • ์ผ์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ๊ฒ€์‚ฌํ•˜๋‹ค.

    ์†Œํ”„ํŠธ์›จ์–ด์— ํ…Œ์ŠคํŠธ

  • ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ฒฐํ•จ์ด ์กด์žฌํ•จ์„ ๋ณด์ด๋Š” ๊ณผ์ •์ด๋‹ค.

  • ์†Œํ”„ํŠธ์›จ์–ด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฅผ ๋ณด์ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฅผ ๋ฐํžˆ๋Š” ๊ณผ์ •์ด๋‹ค.

  • ์‹œ์Šคํ…œ์ด ์ •ํ•ด์ง„ ์š”๊ตฌ๋ฅผ ๋งŒ์กฑํ•˜๋Š”์ง€, ์˜ˆ์ƒ๊ณผ ์‹ค์ œ ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ค ์ฐจ์ด๋ฅผ ๋ณด์ด๋Š”์ง€ ์ˆ˜๋™ ๋˜๋Š” ์ž๋™ ๋ฐฉ๋ฒ•์„ ๋™์›ํ•˜์—ฌ ๊ฒ€์‚ฌํ•˜๊ณ  ํ‰๊ฐ€ํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์ด๋‹ค.


1.2 ํ…Œ์ŠคํŠธ์˜ ๋ชฉ์ 

  • ํ•„์š”ํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธ

  • ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌ

  • ์•ฑ์˜ ์‚ฌ์šฉ์„ฑ์„ ํ™•์ธ

  • ๋“ฑ


1.3 ์ž๋™ํ…Œ์ŠคํŠธ ์™€ ์ˆ˜๋™ํ…Œ์ŠคํŠธ

ํ…Œ์ŠคํŠธ๋Š” ์ˆ˜๋™ ํ…Œ์ŠคํŠธ์™€ ์ž๋™ํ…Œ์ŠคํŠธ๋กœ ํฌ๊ฒŒ ๋‘˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

์ˆ˜๋™ ํ…Œ์ŠคํŠธ๋Š” ์ฝ”๋”ฉ ์ž‘์—…์ด ๋๋‚œ ์ƒํƒœ์—์„œ apk ๋ฅผ ๋งŒ๋“ค๊ณ , ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋กœ ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์‹คํ–‰ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋ฐ˜๋ฉด ์ž๋™ํ…Œ์ŠคํŠธ๋Š”, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋‚˜ UI ํ…Œ์ŠคํŠธ๋กœ ๋ถˆ๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ์•ฑ์ด ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ ํ•œ๋‹ค.

์ž๋™ ํ…Œ์ŠคํŠธ์˜ ํŠน์„ฑ

  • ๋ฐ˜๋ณต ์‹คํ–‰์ด ๊ฐ€๋Šฅ
  • ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ƒํ™ฉ์„ ์‹œ๊ฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ๋“ฑ ์‚ฌ์šฉ์ž ์กฐ์ž‘์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์šด ๋‹จ์œ„์˜ ๋™์ž‘์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ˆ˜๋™ ํ…Œ์ŠคํŠธ์˜ ํŠน์„ฑ

  • ์ตœ์ข… ์‚ฌ์šฉ์ž์™€ ์™„์ „ํžˆ ๋˜‘๊ฐ™์ด ๋™์ž‘์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์„ฑ์ด๋‚˜ ์พŒ์ ํ•จ ๋“ฑ ์ •์„ฑ์ ์ธ ๋ฉด์—์„œ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

1.4 ํ…Œ์ŠคํŒ… ์™œ ํ•ด์•ผ ํ•˜์ฅฌ?

  • ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์ธ ์—ฌ๋Ÿฌ๋ถ„์ด ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ์ด๊ธฐ๋„ํ•˜๋ฉฐ ์•”๋ฌต์ ์œผ๋กœ๋Š” ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํžˆ ์ƒ์‚ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์น˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ์— ๋” ์ž์‹ ๊ฐ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋น›๋‚˜๋Š” ์ดˆ๋ก์ƒ ์ƒํƒœ๋ฐ”์™€ ๋ฆฌํฌํŠธ์˜ ์ƒ์„ธ ๋‚ด์šฉ์€ ํ…Œ์ŠคํŠธ ๋ณด๊ณ ์ž๋ฃŒ๊ฐ€ ๋œ๋‹ค.
  • ์ž๋™ํ™” ํ…Œ์ŠคํŠธ์—์„œ ๋ฒ„๊ทธ๋ฅผ ๋จผ์ € ์žก์•„๋‚ด๊ธฐ์— ๋ฆฌ๊ทธ๋ ˆ์…˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ค‘ ๋ฆฌ๊ทธ๋ ˆ์…˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€์žฅ ํฐ ์žฅ์ ์„ ๊ฐ–๋Š” ๋ถ€๋ถ„์œผ๋กœ, ์—ฌ๋Ÿฌ๋ถ„์ด ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๊ณ  ๋‹ค์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ํŒจ์Šคํ–ˆ์„๋•Œ ์ž์‹ ๊ฐ ์ƒ์Šน์€ ๋‹น์—ฐํ•œ ์ผ์ด๊ฒ ์ฃ ?! ํ…Œ์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ ์ฆ‰์‹œ ๊ทธ ํšจ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๊ธฐ ๋ณด๋‹ค ์•„๋ฌด๋ž˜๋„ ๋ช‡ ๋‹ฌ(;)์€ ์ง€๋‚˜๊ณ  ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•ด์ ธ์•ผ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹คโ€ฆ

1.5 ํ…Œ์ŠคํŒ… ์ข…๋ฅ˜

๊ณต์ •๊ณผ ์š”๊ตฌํ•˜๋Š” ํ’ˆ์งˆ, ์‹คํ–‰ ๋ฐฉ๋ฒ•, ๊ธฐ๋ฒ• ๋“ฑ ๋‹ค์–‘ํ•œ ๊ด€์ ์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ์—๋Š” ์ˆ˜๋งŽ์€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 'V๋ชจ๋ธ' ์—์„œ๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ, ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ, ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ, ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๊ฐ™์€ ๊ณต์ •๋ณ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๊ทธ ๋ฐ–์—๋„ ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ, ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ, ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋“ฑ๋“ฑ ๋งŽ์€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

*** ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์˜ ํ…Œ์ŠคํŠธ ๊ณ„์ธต ์‚ฌ์ง„** (ํ…Œ์ŠคํŒ…์˜ ํ”ผ๋ผ๋ฏธ๋“œ)

แ„‹แ…ขแ†ธ แ„แ…ฆแ„‰แ…ณแ„แ…ณ แ„€แ…จแ„Žแ…ณแ†ผ

๊ธฐ๋ณธ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜๋‚˜ ์‹คํ–‰ ํšŸ์ˆ˜ (์‹คํ–‰ ํƒ€์ด๋ฐ)๋Š” '๋‹จ์œ„ํ…Œ์ŠคํŠธ'๊ฐ€ ๊ฐ€์žฅ ๋งŽ๊ณ , '๊ทธ ๋ฐ–์˜ ํ…Œ์ŠคํŠธ'๊ฐ€ ๊ฐ€์žฅ ์ ๋‹ค. ์•„๋ž˜๋กœ ๊ฐˆ ์ˆ˜๋ก ๋งŽ์•„์ง€๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์ง„์œผ๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ตœํ•˜์ธต์˜ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋Š” ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ์•„์ฃผ ์ž‘์€ ๋‹จ์œ„๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰๋˜๋Š” ํ…Œ์ŠคํŠธ์ด๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ๊ฒ€์ฆ์ด๋‚˜ ์‹คํ–‰์ด ์ด๋ฃจ์–ด ์ง€๋ฏ€๋กœ ์‹คํ–‰ ์‹œ๊ฐ„๋„ ์•„์ฃผ ์งง๋‹ค.

๋‹ค์Œ ๊ณ„์ธต์— ์žˆ๋Š” UI ํ…Œ์ŠคํŠธ๋Š” ์‹ค์ œ ๋™์ž‘ ํ™˜๊ฒฝ์„ ์ค‘์š”์‹œ ํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์‹ค์ œ ๊ธฐ๊ธฐ๋‚˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ์ƒ์—์„œ ์‹คํ–‰๋œ๋‹ค. UIํ…Œ์ŠคํŠธ๋ผ๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋‹จ๋ง์˜ ํ‘œ์‹œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ™•์ธํ•ด ๊ฐ„๋‹ค.

๋‚˜๋จธ์ง€ 2๊ณ„์ธต์ธ ์ธ์ˆ˜ ๊ณ„์ธต๊ณผ ๊ทธ ๋ฐ–์˜ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์‚ฌ์–‘์„ ๋งŒ์กฑํ•˜๋Š”์ง€, ์‚ฌ์šฉ์„ฑ์— ๋ฌธ์ œ๋Š” ์—†๋Š”์ง€์™€ ๊ฐ™์€ ์ •์„ฑ์ ์ธ ์‚ฌํ•ญ์„ ํฌํ•จํ•œ ํ™•์ธ์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ๊ธฐํƒ€ ํ…Œ์ŠคํŠธ์˜ ์ผ๋ถ€๋กœ์„œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋‚˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋‹ค.



2. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ (Unit Test)

2.1 ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ž€?

ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ ํ›„์— ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘์— ๋ฉ”์†Œ๋“œ ๋‹จ์œ„๋กœ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธ

๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ํŠน์ • ๋ชจ๋“ˆ์ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ž˜ ๋™์ž‘ํ•˜๋Š”๊ฐ€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋ชจ๋“  ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๋งํ•œ๋‹ค.

๊ด€๋ จ ํˆด: JUnit, Mockito, PowerMock

๋ฒˆ์™ธ ) UI ํ…Œ์ŠคํŠธ ๊ด€๋ จ ํˆด: Espresso, UIAutomator, Robotium, Appium, Calabash, Robolectric

2.2 ๋‹จ์œ„ ํ…Œ์ŠคํŠธ, ์™œ ํ•ด์•ผํ•˜์ฅฌ?

  • ๋‚ด ์ฝ”๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ๋‹›(ํ•จ์ˆ˜/๋ฉ”์„œ๋“œ) ๋ฅผ ๋” ์ž‘๊ฒŒ ๋งŒ๋“ ๋‹ค. -> ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๋ฉฐ, ๋ณ€ํ™”์‹œํ‚ค๋Š” ๊ฒƒ ๋˜ํ•œ ์‰ฝ๋„๋ก ํ•œ๋‹ค. ์ฝ”๋“œ์˜ ๋‹จ์œ„๋Š” ์ž‘์„ ์ˆ˜๋ก ์ข‹๋‹ค.
  • ๋ฌธ์ œ๋ฅผ ๋นจ๋ฆฌ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ณ€ํ™”๋ฅผ ์‰ฝ๊ฒŒํ•˜๋ฉฐ ํ†ตํ•ฉ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๊ณ  ์„ค๊ณ„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.3 Mockito

์ด์ƒ์ ์œผ๋กœ, ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์„œ๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๊ฐ€์งœ ๊ฐ์ฒด (Mock object) ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.



3. JUnit

์ด ๋ฌธ์„œ๋Š” JUnit4๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3.1 JUnit ์ด๋ž€?

์•ˆ๋“œ๋กœ์ด๋“œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—๋Š” JUnit ์ด๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. JUnit์€ ์ž๋ฐ”์šฉ ๋‹จ์œ„ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์„ ์œ„ํ•œ ์‚ฐ์—… ํ‘œ์ค€ ํ”„๋ ˆ์ž„์›Œํฌ ์ด๋‹ค.

ํ•ด๋‹น ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•ด ์ค€๋‹ค.


3.2 ๊ธฐ๋ณธ ๋‹จ์ •๋ฌธ

  • ๋‹จ์ •๋ฌธ์ด ๋ญ”๊ฐ€์š”?

    JUnit์—์„œ ํ…Œ์ŠคํŠธ์˜ ์„ฑ๊ณต ์‹คํŒจ๋ฅผ ํŒ๋‹จํ•˜๋„๋ก ํ•˜๋Š” ๋ฌธ์žฅ์„ ๋‹จ์ •๋ฌธ์ด๋ผ ํ•œ๋‹ค.

  • ๋‹จ์ •๋ฌธ์˜ ์ข…๋ฅ˜
    Method ์„ค๋ช… ๋น„๊ณ  (์˜ˆ์‹œ)
    assertEqaul(expected, actual) ๋‘ ๊ฐ’์ด ๊ฐ™์€์ง€ ๋น„๊ตํ•˜๋Š” ๋‹จ์ •๋ฌธ assertEqual(10, Calculator.add(2,8))
    assertSame ๋‘ ๊ฐ์ฒด๊ฐ€ ์ •๋ง ๋™์ผํ•œ ๊ฐ์ฒด์ธ์ง€ ์ฃผ์†Œ๊ฐ’์œผ๋กœ ๋น„๊ตํ•˜๋Š” ๋‹จ์ •๋ฌธ
    assertTrue ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋‹จ์ •๋ฌธ boolean๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ ํ•ฉ (assertTrue,assertFalse ๋‘˜๋‹ค)
    assertFalse ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๊ฑฐ์ง“์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋‹จ์ •๋ฌธ assertFalse(Calculator.isInteger("abc"))
    assertNull ๋Œ€์ƒ ๊ฐ’์ด null์ด๋ฉด ์ฐธ์ด ๋˜๋Š” ๋‹จ์ •๋ฌธ assertNull(textFile)
    assertNotNull ๋Œ€์ƒ๊ฐ’์ด null์ด ์•„๋‹ˆ๋ฉด ์ฐธ์ด ๋˜๋Š” ๋‹จ์ •๋ฌธ assertNotNull(textFile)
    fail([message]) ํ˜ธ์ถœ ์ฆ‰์‹œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์‹คํŒจ๋กœ ํŒ์ •ํ•˜๋Š” ๋‹จ์ •๋ฌธ fail ๋‹จ์ •๋ฌธ ํ™œ์šฉ์‚ฌ๋ก€

3.3 JUnit ์–ด๋…ธํ…Œ์ด์…˜ (Annotation)

  • ์–ด๋…ธํ…Œ์ด์…˜

    Ex) @Override, SuppressWarnings

    ์–ด๋…ธํ…Œ์ด์…˜์€ ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€๋งŒ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋กœ์„œ์˜ ์šฉ๋„๊ฐ€ ๊ฐ€์žฅ ํฌ๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ : ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธ, ํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์˜๋ฏธํ•˜๋Š” ๋ฐ์ดํ„ฐ (์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๋ฐ์ดํ„ฐ)

    โ€‹

    JUnit4์—์„œ ๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ์–ด๋…ธํ…Œ์ด์…˜์ด ์ด์šฉ๋œ๋‹ค.


  • Junit4์—์„œ์˜ ์ฃผ์š” ์–ด๋…ธํ…Œ์ด์…˜
    Annotation ์„ค๋ช… ๋น„๊ณ 
    @Test ํ…Œ์ŠคํŠธํ•  ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค. @Test(timeout=1000)//1์ดˆ ์ดˆ๊ณผ์‹œ ์—๋Ÿฌ@Test(expected = RuntimeException.class) //์˜ˆ์™ธ ์˜ˆ์ƒ
    @Ignore ๋ฌด์‹œ. ๋‹จ์œ„ํ…Œ์ŠคํŠธ์—์„œ ์ œ์™ธ๋œ๋‹ค.
    @BeforeClass ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ์‹คํ–‰ ์ „์— ํ•œ๋ฒˆ ์ˆ˜ํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ ์ž„์„ ์„ ์–ธํ•œ๋‹ค.
    @AfterClass ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ์‹คํ–‰ ํ›„์— ํ•œ๋ฒˆ ์ˆ˜ํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ์ž„์„ ์„ ์–ธํ•œ๋‹ค.
    @Before ๋‹ค์Œ์— ๋‚˜์˜ค๋Š” @Test ์‹คํ–‰ ์ „์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ์ž„์„ ์„ ์–ธํ•œ๋‹ค.
    @After ์ด์ „์— ๋‚˜์˜จ @Test ์‹คํ–‰ ํ›„์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ์ž„์„ ์„ ์–ธํ•œ๋‹ค.

  • BeforeClass/AfterClass ์™€ Before/After์˜ ํ˜ธ์ถœ ์ˆœ์„œ ์ดํ•ด

    Annotation


3.4 JUnit์„ ์ด์šฉํ•ด ์ง์ ‘ ํ…Œ์ŠคํŠธํ•ด๋ณด์ž! - Calculator

  1. Caluculator ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
    public class Calculator {
        public static int add(int a, int b) {
            return a + b;
        }
    
        public static int subtract(int a, int b) {
            return a - b;
        }
    
        public static int multiply(int a, int b) {
            return a * b;
        }
    
        public static double division(int a, int b) {
            return a / b;
        }
    }

  1. ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ž

    Caculator ํด๋ž˜์Šค์— ์ปค์„œ๋ฅผ ๋†“๊ณ  ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ํด๋ฆญ -> [GoTo -> Test] -> [Create New Test]

    Create New Test๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ €๋Ÿฐ ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์„ ํƒ

    OK๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๋Š” ์ฐฝ์ด ๋‚˜์˜ค๋Š”๋ฐ, com(test) ๋ฅผ ์„ ํƒํ•œ๋‹ค. (๊ทธ ์ด์œ ๋Š” ํ•˜๋‹จ์— [์ฐธ๊ณ ] ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.)

    Create Test


[์ฐธ๊ณ ] com(androidTest) ๋ผ๊ณ  ํ‘œ์‹œ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋Š” UIํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณณ์ด๊ณ ,

โ€‹ com(test) ๋ผ๊ณ  ํ‘œ์‹œ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณณ์ด๋‹ค.

  • androidTest : Android Instrumentation ํ…Œ์ŠคํŠธ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋‚˜ ์‹ค๋ฌผ ๋””๋ฐ”์ด์Šค์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • test : ์œ ๋‹› ํ…Œ์ŠคํŠธ๊ฐ€ ์œ„์น˜ํ•˜๋Š” ๊ณณ์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋กœ์ปฌ ๋จธ์‹ ์˜ JVM์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋‚˜ ์‹ค๋ฌผ ๋””๋ฐ”์ด์Šค์—์„œ ๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ์ด ํ…Œ์ŠคํŠธ๋กœ๋Š” Context์™€ ๊ฐ™์€ ์•ˆ๋“œ๋กœ์ด๋“œ ํด๋ž˜์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

    โ€‹

  • test directory


  1. ์ƒ์„ฑ๋œ CaculatorTest ํด๋ž˜์Šค์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
    	public class CalculatorTest {
           // ์ดˆ๊ธฐํ™” ์‹œ ํ•œ๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
           @Before
           public void setUp() throws Exception {
           }
    
           // ํ…Œ์ŠคํŠธ ์™„๋ฃŒ ์‹œ์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
           @After
           public void tearDown() throws Exception {
           }
    
           @Test
           public void add() throws Exception {
               assertEquals(10, Calculator.add(2,8));
           }
    
           @Test
           public void subtract() throws Exception {
               assertEquals(4, Calculator.subtract(10,6));
           }
    
           @Test
           public void multiply() throws Exception {
               assertEquals(0, Calculator.multiply(0,10));
               assertEquals(10, Calculator.multiply(1,10));
    
           }
    
           @Test
           public void division() throws Exception {
               assertEquals(2.5, Calculator.division(5,2),0);   //์„ธ๋ฒˆ์งธ ์ธ์ž: ์˜ค์ฐจ ํ—ˆ์šฉ์น˜
               assertEquals(2, Calculator.division(4,2),0);
           }
    
       }
  • ๋ฌธ๋ฒ•์ ์œผ๋กœ ํ•จ์ˆ˜๋ช… ํ•œ๊ธ€๋„ ๊ฐ€๋Šฅ.


  1. ๊ฐ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค ์•ž์— ์žˆ๋Š” ์‹คํ–‰๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    ํ•˜๋‹จ์— ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๋œฌ๋‹ค.



4. ๋งˆ๋ฌด๋ฆฌ

์†Œ๊ฐ

์ถœ์ฒ˜

์ฑ…
  • ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ ๋ ˆ๋ฒจ์—… ๊ต๊ณผ์„œ (์ฏ”์ฏ”์ด ์ŠŒ์Šค์ผ€ ์™ธ 5๋ช… ์ง€์Œ)
  • ๋  ๋•Œ๊นŒ์ง€ ์•ˆ๋“œ๋กœ์ด๋“œ (์˜ค์ค€์„ ์ง€์Œ) - 30์žฅ.1. ๋‹จ์œ„ํ…Œ์ŠคํŠธ ๋ถ€๋ถ„ ์ฐธ๊ณ 
์›น์‚ฌ์ดํŠธ