π‘ ν μ€νΈ νλ μ μν¬μΈ JUnit5λ₯Ό νμ©ν΄μ λ¨μ ν μ€νΈμ ν΅ν© ν μ€νΈλ₯Ό μμ±νκ³ μ€ννλ λ°©λ²μ νμ©νμμ΅λλ€.
Junit5
- μλ° μ ν리μΌμ΄μ μ μν μ΅μ ν μ€νΈ νλ μμν¬λ‘, λ¨μ ν μ€νΈ λ° ν΅ν© ν μ€νΈλ₯Ό μμ±νκ³ μ€ννλ λ° μ¬μ©λ©λλ€.
- Java 8μμ λμ λ κΈ°λ₯μ νΉλ³ν νκ²μΌλ‘ νλ μ¬λ¬ κΈ°λ₯μ΄ ν¬ν¨λμ΄ μμΌλ©°, μ£Όλ‘ λλ€ ννμ€μ μ¬μ©νμ¬ κ΅¬μΆλμμ΅λλ€.
κ΅¬μ± μμ
- Junit Platform
- ν μ€νΈλ₯Ό μ€ννκΈ° μν κΈ°λ°μ μ 곡ν©λλ€.
- IDEλ λΉλ λꡬ(Maven, Gradle λ±)μμ ν΅ν©μ μ§μνλ©°, λ€μν ν μ€νΈ μμ§μ μ€νν μ μλ κ³΅ν΅ μ€ν νκ²½μ μ 곡ν©λλ€.
- Junit Jupiter
- JUnit 5μμ μλ‘κ² λμ λ νλ‘κ·Έλλ° λ° νμ₯ λͺ¨λΈμ μ 곡ν©λλ€.
- @Tset, @BeforEath, @AfterEach λ± μλ‘μ΄ μ΄λ Έν μ΄μ μ΄ ν¬ν¨λμ΄ μμΌλ©°, JUnit5μμ μ£Όλ‘ μ¬μ©λλ API μ λλ€.
- JUnit Vintage
- JUnit 4μ μ΄μ λ²μ μ ν μ€νΈ μ½λλ₯Ό JUnit5 νκ²½μμ μ€νν μ μλλ‘ μ§μνλ λͺ¨λμ λλ€.
- κΈ°μ‘΄μ JUnit4 ν μ€νΈλ₯Ό λ§μ΄κ·Έλ μ΄μ ν νμ μμ΄ μ€νν μ μμ΅λλ€.
μ£Όμ μ΄λ Έν μ΄μ
- Junit5μμλ ν
μ€νΈ λ©μλλ₯Ό μ μνκ³ , ν
μ€νΈ μλͺ
μ£ΌκΈ°λ₯Ό κ΄λ¦¬νκΈ° μν΄ λ€μν μ΄λ
Έν
μ΄μ
μ μ 곡ν©λλ€.
- @Test : ν μ€νΈ λ©μλλ₯Ό μ μνλ©°, ν΄λΉ λ©μλλ ν μ€νΈ μμ§μ μν΄ μ€νλ©λλ€.
- @BeforeEach : κ° ν μ€νΈ λ©μλκ° μ€νλκΈ° μ μ μ€νλλ λ©μλλ₯Ό μ μν©λλ€.
- @AfterEach : κ° ν μ€νΈ λ©μλκ° μ€νλ νμ μ€νλλ λ©μλλ₯Ό μ μν©λλ€.
- @BeforAll : λͺ¨λ ν μ€νΈκ° μ€νλκΈ° μ μ ν λ²λ§ μ€νλλ λ©μλλ₯Ό μ μν©λλ€.
- @AfterAll : λͺ¨λ ν μ€νΈκ° μ€ν λ νμ ν λ²λ§ μ€νλλ λ©μλλ₯Ό μ μν©λλ€.
- @DisplyName : ν μ€νΈ λ©μλμ λν μ¬μ©μ μ μ μ΄λ¦μ μ§μ ν©λλ€.
- @Disabled : νΉμ ν μ€νΈ λ©μλλ₯Ό λΉνμ±ννκ±°λ 무μν λ μ¬μ©ν©λλ€.
ꡬνν΄λ³΄κΈ°
- Junit5λ₯Ό νμ©ν κ°λ¨ν ν μ€νΈλ₯Ό ꡬννμμ΅λλ€.
import org.junit.jupiter.api.*
// @BeforeAll, @AfterAll λ©μλλ₯Ό μΈμ€ν΄μ€ λ©μλλ‘ μ¬μ© κ°λ₯νκ² μ€μ
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class CalculatorTest {
private lateinit var calculator: Calculator
@BeforeAll
fun initAll() {
println("Before all tests")
}
@BeforeEach
fun setUp() {
println("Before each test")
calculator = Calculator()
}
@Test
@DisplayName("Test for addition")
fun testAddition() {
println("Testing addition")
Assertions.assertEquals(4, calculator.add(2, 2))
}
@Test
@DisplayName("Test for subtraction")
fun testSubtraction() {
println("Testing subtraction")
Assertions.assertEquals(0, calculator.subtract(2, 2))
}
@Test
@DisplayName("Test for multiplication")
// Disableλ₯Ό ν΅ν΄μ ν
μ€νΈλ₯Ό μ€ννμ§ μμ΅λλ€.
@Disabled("Disabled until bug #1234 has been fixed")
fun testMultiplication() {
println("Testing multiplication")
Assertions.assertEquals(4, calculator.multiply(2, 2))
}
@AfterEach
fun tearDown() {
println("After each test")
}
@AfterAll
fun tearDownAll() {
println("After all tests")
}
}
class Calculator {
fun add(a: Int, b: Int): Int = a + b
fun subtract(a: Int, b: Int): Int = a - b
fun multiply(a: Int, b: Int): Int = a * b
}
Advanced Assertions
- JUnit5λ λλ€λ₯Ό μ¬μ©νκΈ° μν΄ μ¬λ¬ μμ μ΄μ€μ μ μ¬μ©ν μ μμ΅λλ€.
Exception Asserting
- νΈμΆμ΄ μμΈλ₯Ό throwν κ²μΌλ‘ μμλλ κ²½μ°μ μ΄μ€μ μ μΆκ°ν μ μμ΅λλ€.
- νΉμ νΈμΆμ΄ μμλ μμΈλ₯Ό throwνλμ§ ν μ€νΈν μ μμ΅λλ€.
@Test
fun `Dividing by zero should throw the DivideByZeroException`() {
val exception = Assertions.assertThrows(DivideByZeroException::class.java) {
calculator.divide(5, 0)
}
Assertions.assertEquals(5, exception.numerator)
}
Multiple Assertions
- μ¬λ¬ κ°μ μ΄μ€μ μ λμμ μνν μ μλ κΈ°λ₯μ μ 곡ν©λλ€.
- λͺ¨λ κΈ°λ₯μ νκ°νλ©°, λͺ¨λ μ€ν¨μ λν΄ λ³΄κ³ ν©λλ€.
fun `The square of a number should be equal to that number multiplied in itself`() {
Assertions.assertAll(
Executable { Assertions.assertEquals(1, calculator.square(1)) },
Executable { Assertions.assertEquals(4, calculator.square(2)) },
Executable { Assertions.assertEquals(9, calculator.square(3)) }
)
}
Boolean Assertions
- νΈμΆμ΄ μ°Έ or κ±°μ§μ μ μμ μΌλ‘ λ°ννλμ§ ν μ€νΈν μ μμ΅λλ€.
@Test
fun `isEmpty should return true for empty lists`() {
val list = listOf<String>()
Assertions.assertTrue(list::isEmpty)
}
JUnit5μ μ₯μ
- μ μ°ν ν
μ€νΈ λͺ¨λΈ
- ν μ€νΈ μ€νμ μ μ°μ±μ λμ΄κΈ° μν΄ λ€μν νμ₯ ν¬μΈνΈλ₯Ό μ 곡ν©λλ€.
- ν μ€νΈ λΌμ΄ν μ¬μ΄ν΄, μ‘°κ±΄λΆ μ€ν, λ°λ³΅ ν μ€νΈ λ±..
- νμ₯ κ°λ₯μ±
- μ¬μ©μ μ μ νμ₯μ ν΅ν΄ νλ μμν¬λ₯Ό νμ₯ν μ μλ κΈ°λ₯μ μ 곡ν©λλ€.
- ν¬νλ ₯μ΄ λμ ν
μ€νΈ
- @DisplyNameμ μ¬μ©ν΄ν μ€νΈ μΌμ΄μ€μ λͺ ννκ³ μ§κ΄μ μΈ μ΄λ¦μ λΆμ¬ν μ μμ΅λλ€.
- λ λμ ꡬ쑰ν
- JUnit Jupiter, JUnit Playform, JUnit Vintageμ κ°μ λͺ¨λνλ ꡬ쑰λ₯Ό ν΅ν΄ νμ₯ κ°λ₯νκ³ λ λμ ꡬ쑰νλ₯Ό μ 곡ν©λλ€.
κ²°λ‘
- JUnit 5λ μλ° μ ν리μΌμ΄μ ν μ€νΈλ₯Ό μν μ΅μ νμ€ νλ μμν¬μ λλ€.
- μ μ°νκ³ νμ₯ κ°λ₯ν ν μ€νΈ νκ²½μ μ 곡νλ©°, λ€μν ν μ€νΈ μ λ΅μ μ§μν©λλ€.
- JUnit 5λ₯Ό μ¬μ©νμ¬ ν μ€νΈ μ½λμ νμ§μ λμ΄κ³ , μ½λμ μμ μ±κ³Ό μ μ§λ³΄μμ±μ κ°μ ν μ μμ΅λλ€.