ν μ€νΈ μ½λλ "μꡬμ¬νμ ꡬ체νν μ°μΆλ¬Ό" μ΄λΌκ³ λ³Ό μ μλ€. μꡬμ¬νμ ν μ€νΈ μ½λλ‘ λ¨Όμ μ μν λ€ κΈ°λ₯μ κ°λ°νλ λ°©λ²λ‘ μ TDD (=Test-Driven Developemnt) λΌκ³ νλ€.
ν μ€νΈ μ½λλ μ€μλ μ€λ₯λ₯Ό λ°κ²¬νκ³ μ΄λ₯Ό μ€μ΄κ³ μμ νκΈ° μν΄ μμ±νλ κ²μ΄κΈ° λλ¬Έμ μ‘°κΈμ μ μμ μΌλ‘ μλλλ λΆλΆλ§μ ν μ€νΈλ‘ λμ§ μκ³ , μμΈμ μ΄κ³ , μμ λ°μΈ λΆλΆμ ν μ€νΈ μ½λλ‘ μμ±ν΄λ΄μΌλ‘μ¨ μ‘°κΈμ λ μ ννκ³ κΉλν μ½λκ° λμ¬ μ μκ² ν΄μ€λ€.
π Test Code μ λͺ©ν
ν μ€νΈ μ½λλ₯Ό μμ±νλ μ΄μ λ, μ μλνλ, κΉλν μ½λλ₯Ό μ»κΈ° μν΄μ μ΄λ€.
μ ν μ€νΈμ½λλ₯Ό μμ±νλ©΄, κΉλν μ μλνλ κΉλν μ½λλ₯Ό μ»μ μ μμκΉ?
ν μ€νΈλ₯Ό μ½κ²νκΈ° μν΄μλ, μ΄ν리μΌμ΄μ μ½λλ₯Ό ν μ€νΈνκΈ° μ½κ² μ§μΌνλ©° κ²°κ΅ ν μ€νΈ μ½λλ₯Ό μ§κΈ° μν΄ λ Έλ ₯νλ€λ³΄λ©΄ μ΄ν리μΌμ΄μ μ½λκ° κΉλν΄μ§λκ²μ νμΈν μ μμ κ²μ΄λ€.
λ¨μ ν
μ€νΈ μ½λ
λ κ°λ₯νλ©΄ κ°κ²°νκ³ μ½κΈ° μ½κ²
μμ±νλ κ² κ°μ₯ μ’λ€. μ΄λ ν μλλ‘ κΈ°λ₯ κ²μ¦μ μννλμ§ μλκ° λλ¬λλ κ²μ΄ μ’κΈ°λλ¬Έμ λ¨μ ν
μ€νΈλ 10μ€ μ΄ν
λ‘ μμ±νκ³ , λ¨μ ν
μ€νΈ μ½λλ λ¨μΌ κΈ°λ₯μ κ²μ¦
νλ κ²μ΄ μ’λ€. λν, νλμ ν
μ€νΈ μ½λμμ μ¬λ¬ κ°μ§ κΈ°λ₯μ κ²μ¦νλ μ½λλ₯Ό μμ±νλ©΄, μ€λ₯κ° λ°μν μ§μ μ΄νμ ν
μ€νΈλ μ§νλμ§ μκΈ° λλ¬Έμ ν
μ€νΈ μ½λλ κ°λ₯νλ€λ©΄ λ
립μ μΌλ‘ μ€νλ μ μλ ꡬ쑰
λ‘ μμ±νλ κ²μ΄ μ’λ€.
μλμ κ°μ β¨λ¨μ ν
μ€νΈλ 5κ°μ§ μμΉ
β¨μ μ€μνλ€λ©΄, μ¬λ°λ₯΄κ² μμ±λ λ¨μ ν
μ€νΈλΌκ³ λ³Ό μ μλ€.
Fast
: λΉ λ₯΄κ² μ€νλμ΄μΌ νλ€.
Isolated
: κ° ν
μ€νΈλ λ
립μ μΌλ‘ μ€νλμ΄μΌ νλ€.
Repeatable
: λ§€λ² μ€ν κ²°κ³Όλ λμΌν΄μΌ νλ€.
Self-Verifying
: κ²°κ³Όλ Pass or Fail λ μ€ νλμ μν κ°μ κ°μ§λ€.
Timely
: λΉμ¦λμ€ λ‘μ§ μ½λ μμ±λ³΄λ€ ν
μ€νΈ μ½λλ₯Ό λ¨Όμ μμ±νλ€.
β μλ²λ₯Ό μ€ννλ λ±μ μκ°μ μ μ½ν μ μλ€.
β νμν λ°μ΄ν°λ₯Ό 미리 κΈ°μ νκ³ , ν μ€νΈκ° λλκ³ μ 리νλλ±μ νλμ νμ§ μμλ λλ€.
β λ¨μν μ€νΈμ κ²½μ° μμms μ΄κΈ° λλ¬Έμ ν μ€νΈκ° λ§€μ° λΉ λ₯΄λ€.
β
λ¬Έμλ‘μμ μν μ΄ κ°λ₯νλ€.
π¨ ν
μ€νΈ μ½λλ, κ°λ°μκ° μμ±ν λ©μλκ° μ΄λ»κ² λμνμΌλ©΄, μ΄λ€ κ²°κ³Όλ₯Ό λ°ννμΌλ©΄, νλ κ²μ μμ±ν κ²μ΄κΈ° λλ¬Έμ μ²μ μ½λλ₯Ό 보λ κ°λ°μλ€μ΄ ν
μ€νΈ μ½λλ₯Ό ν΅ν΄μ μ½λμ λμμ μ‘°κΈ λ μμνκ² μ΄ν΄ν μ μλ€.
β κΉλν μΈν°νμ΄μ€λ₯Ό μ»μ΄λΌ μ μλ€.
JUnitμ μλ° λ¨μ ν μ€νΈ μλνλ₯Ό μ§μνλ νλ μμν¬
JUnit
μΌλ‘ λ¨μ ν
μ€νΈ μ½λλ₯Ό μμ±ν λ, λ©μλλ₯Ό μ΄λ
Έν
μ΄μ
μΌλ‘ ν
μ€νΈ μ½λλ‘ μμ±ν μ μμΌλ©°, μ΄λ
Έν
μ΄μ
μ΄ μ§μ λ λ©μλ λλ ν΄λμ€λ₯Ό μ€ννλ€.
JUnit
μ @BeforeClassλ‘ μ§μ λ ν΄λμ€λ₯Ό κ°μ₯ λ¨Όμ μ€ννκ³ , κ·Έ μ΄νλ‘λ @Test
, @Before
, @After
λ‘ μ§μ λ λ©μλλ₯Ό μ€ννλ€. ν
μ€νΈ μΌμ΄μ€κ° λͺ¨λ μ€ν μλ£λλ©΄ @AfterClassλ‘ μ§μ λ ν΄λμ€κ° μ€νλλ€.
Annotationμ ν μ€νΈ λ©μλ λλ ν΄λμ€μ νμλ₯Ό μ§μ νλκ²μ΄λ©° Test Fixtureλ ν μ€νΈλ₯Ό μ€νν λ, κ°μ²΄λ€μ μνλ₯Ό κ³ μ μν€λ κ²μ΄λ€.
@After
λ©μλ @Beforeμμ μ€μ ν ν
μ€νΈ ν½μ€μ³λ₯Ό μ κ±°νκΈ° μν΄ μ¬μ©λλ€.
@AfterClass
λ©μλ @BeforeClass μμ μ€μ ν ν
μ€νΈ ν½μ€μ³λ₯Ό μ κ±°νκΈ° μν΄ μ¬μ©λλ€.
@Before
λ©μλ ν
μ€νΈ ν½μ€μ³λ₯Ό λ§λ€κΈ° μν΄ μ¬μ©λλ€
@BeforeClass
λ©μλ μμ±μ λ§μ μκ°μ΄ μμλλ ν½μ€μ³λ₯Ό μ€μΉνλ μ©λλ‘ μ¬μ©λλ€.
@Ignore
λ©μλ ν΄λΉ ν
μ€νΈ μΌμ΄μ€λ₯Ό μ€ννμ§ μλλ‘ νλ€.
@RunWith
ν
μ€νΈ ν ν΄λμ€ ν
μ€νΈ μΌμ΄μ€λ₯Ό μ€νν ν
μ€νΈ λ¬λλ₯Ό μ§μ ν μ μλ€.
@Suite
ν
μ€νΈ ν ν΄λμ€ λ¨μ ν
μ€νΈ μΌμ΄μ€λ€μ λ¬Άμ΄μ κ°μ΄ μ€ννκ³ μΆμ λ μ¬μ©νλ€.
@Test
λ©μλ ν
μ€νΈ μΌμ΄μ€λ‘ μ§μ νλ€.
π ν
μ€νΈ μΌμ΄μ€μμ κΈ°λ μΆλ ₯ κ°κ³Ό μ€μ μΆλ ₯ κ°μ λΉκ΅νλ ꡬ문μ Assert
μ
λλ€. μΆλ ₯ κ°μ ν΄λΉνλ λ³μμ νμ
μ μ’
λ₯κ° λ€μνλ―λ‘, JUnitμμ λ€μν λ³μ«κ°μ λΉκ΅ν μ μλλ‘ μ¬λ¬ μ’
λ₯μ Assertꡬ문μ μ§μνκ³ μμ΅λλ€.
assertEquals(expected,actual)
: λ κ°μ²΄μ equals κ²°κ³Όκ° μ°ΈμΈμ§ κ²μ¬νλ€.
assertTrue(actual)
: κ³μ°κ²°κ³Όκ° μ°ΈμΈμ§ κ²μ¬νλ€.
assertFalse(actual)
: κ³μ°κ²°κ³Όκ° κ±°μ§μΈμ§ κ²μ¬νλ€.
assertNotNull(actual)
: κ³μ°κ²°κ³Όκ° nullμ΄ μλμ§ κ²μ¬νλ€.
assertNull(actual)
: κ³μ°κ²°κ³Όκ° nullμΈμ§ κ²μ¬νλ€.
assertSame(expected,actual)
: λ κ°μ²΄κ° λμΌ κ°μ²΄μΈμ§ κ²μ¬νλ€.
assertNotSame(expected,actual)
: λ κ°μ²΄κ° λμΌ κ°μ²΄κ° μλμ§ κ²μ¬νλ€.
fail("Test Fail")
: ν
μ€νΈ μΌμ΄μ€λ₯Ό μ€ν¨μν¨λ€.
assertArrayEquals(expected,actual)
: λ κ°μ λ°°μ΄μ equals κ°μ΄ μ°ΈμΈμ§ κ²μ¬νλ€.
JUnit ν μ€νΈ μ½λμ μ€ν κ²°κ΄κ°μ Pass, Fail κ·Έλ¦¬κ³ Error μν κ°μ κ°μ§λ€.
ν΅κ³Ό(Pass)
λ Assertλ¬Έμ΄ ν΅κ³Όλμμ λ κ°μ§λ μν κ°μ΄λ€.
μ€ν¨(Fail)
λ Assertλ¬Έμ΄ μ€ν¨ νκ²½μ°μ΄λ€.
μ€λ₯(Error)
λ ν
μ€νΈ μΌμ΄μ€ μ€ν μ μμΈκ° λ°μνμ¬ μ€λ₯κ° λ°μν κ²½μ°μ΄λ€.
ν
μ€νΈ μ½λλ μμ€μ½λ
μ΄λ―λ‘, μλλ₯Ό λΆλΆλͺ
νκ² μμ±νκ±°λ, λ°λ³΅μ μΌλ‘ λμΌν ν
μ€νΈ μ½λλ₯Ό μμ±νλ©΄ λΉν¨μ¨μ΄ λ°μνλ€.
κ·Έλ¬λ―λ‘, ν
μ€νΈ μ½λλ μ§μμ μΌλ‘ μ μ§λ³΄μ
λ₯Ό μνν΄μ£Όμ΄μΌ νλ€. ν
μ€νΈ μ½λλ₯Ό κ²μ¦ν λ, μ½λ μ€λ©, νλ μ€λ© λλ νλ‘μ νΈ μ€λ©μ΄ λ°κ²¬λλ€λ©΄, ν
μ€νΈ μ½λλ μμ λμ΄μΌ νλ€.
μ¦, ν μ€νΈμ½λλ₯Ό λ΄μΌλ‘μ¨, ν΄λΉ λ©μλλ₯Ό μμ±ν κ°λ°μκ° μ΄λ€μλλ‘ λ§λ€μμΌλ©°, μ΄λ»κ² λμνκΈΈ μνλμ§λ₯Ό μ μ μκ²λ ν΄μ£ΌκΈ° λλ¬Έμ ν μ€νΈ μ½λλ₯Ό μμ±νλ μ΅κ΄μ λ€μ¬μΌνλ€.
μΆμ² : https://it-techtree.tistory.com/entry/reason-why-programmer-writes-unit-test#google_vignette
https://it-techtree.tistory.com/entry/How-to-write-java-test-code-using-junit