ํ ์คํธ ์ฝ๋๋ ๋ฌด์์ธ๊ฐ?
- ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๊ธฐ๋ฅ ์ฝ๋๊ฐ ์์๋๋ก ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์์ฑํ๋ ์ฝ๋
- ํ์ง๋ง ์ค์ ๋ก๋ ์๊ฐ์ ์ซ๊ธฐ๋ค ๋ณด๋ main ํจ์์์ ์ง์ ํ ์คํธ๋ฅผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค . . ๐
์ด๋ฒ ๊ฒจ์ธํน๊ฐ์ ํตํด ํ ์คํธ ์ฝ๋ ์ง๋ ์ต๊ด์ ๋ค์ฌ๋ณด๋ ค๊ณ ํ๋ค!
(์๋๋ฉด, ์ ์๋์ด ๋จธ์ง๋ฅผ ์ํด์ฃผ์ ๋ค . . ๐
)
Kotlin ํ ์คํธ ๋๊ตฌ
- JUnit4: ์ค๋ ์๊ฐ ๋์ ํ์ค์ผ๋ก ์ฌ์ฉ๋์ด ์จ ๋๊ตฌ
- JUnit5: ์ต์ ๊ธฐ๋ฅ์ ์ง์ํ๋ ๊ฐ์ ๋ ๋ฒ์
- Kotest: Kotlin ์นํ์ ์ธ ํ ์คํธ ํ๋ ์์ํฌ
์๋๋ก์ด๋ ํ ์คํธ ํ๊ฒฝ์์๋ JUnit4๊ฐ ์ค๋ ๊ธฐ๊ฐ ํ์ค์ผ๋ก ์๋ฆฌ ์ก๊ณ ์์๊ธฐ ๋๋ฌธ์,
์ด๋ฒ ํฌ์คํ ์์๋ JUnit4๋ฅผ ์ฌ์ฉํด ํ ์คํธ ํ๊ฒฝ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃฌ๋ค.
JUnit4 ์ถ๊ฐ ํ๊ธฐ
2024๋ 12์ ํ์ฌ ๊ธฐ์ค์ผ๋ก Kotlin ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก JUnit5๊ฐ ํ ์คํธ ๋๊ตฌ๋ก ์ค์ ์ด ๋์ด์๋ค.
๋ฐ๋ผ์ JUnit4๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ง ์ค์ ์ด ํ์ํ๋ค.
1. Gradle ํ์ผ ์์ ํ๊ธฐ
build.gradle.kts ํ์ผ์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐ
dependencies {
testImplementation("junit:junit:4.13.2")
}
์ฝ๋๋ฅผ ์ถ๊ฐํ ํ, ์ค๋ฅธ์ชฝ ์๋จ์ ๋จ๋ "Sync Now" ๋ฒํผ์ ๋๋ฌ Gradle์ ๋๊ธฐํ!
๋ํ ํ๋จ์
tasks.test {
useJUnitPlatform()
}
ํด๋น ์ฝ๋๋ JUnit5์ฉ ์ฌ์ฉ ์ค์ ์ด๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข๋ค.
2. ํ ์คํธ ํด๋์ค ๋ง๋ค๊ธฐ
ํ ์คํธ๋ฅผ ์์ฑํ๋ ค๋ ํด๋์ค๋ฅผ IntelliJ์์ ์ ํํ ํ
- ํด๋์ค ์ด๋ฆ ์์์ Alt + Enter
- "Create Test"๋ฅผ ์ ํ
- ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก JUnit4๋ฅผ ์ ํ
์์๋ก ๊ฐ๋จํ Calculator ํด๋์ค๋ฅผ ์์ฑํด ๋ณด์์.
class Calculator {
fun add(a: Int, b: Int): Int = a + b
fun subtract(a: Int, b: Int): Int = a - b
fun divide(a: Int, b: Int): Int {
if (b == 0) throw IllegalArgumentException("Cannot divide by zero")
return a / b
}
}
์ฌ๊ธฐ์ Calculator์ ์ปค์๋ฅผ ๋๊ณ Alt + Enter๋ฅผ ๋๋ฅด๋ฉด,
์ด๋ ๊ฒ Create test๋ฅผ ๋ณผ ์ ์๋ค.
Testing library์์ Junit4๋ฅผ ์ ํํ๊ณ OK๋ฅผ ๋๋ฌ์ฃผ๋ฉด
src/test/kotlin ๊ฒฝ๋ก์ CalculatorTest๊ฐ ์์ฑ๋๋ค.
3. JUnit4 ์ ๋ ธํ ์ด์ ์ฌ์ฉํ๊ธฐ
JUnit4์์ ์ฌ์ฉํ ์ ์๋ ์ฃผ์ ์ ๋ ธํ ์ด์
- @Test: ํ ์คํธ ๋ฉ์๋์์ ํ์
- @Before: ๊ฐ ํ ์คํธ ์คํ ์ ์ ์ค์ ์์ ์ ์ํ
- @After: ๊ฐ ํ ์คํธ ์คํ ํ ์ ๋ฆฌ ์์ ์ ์ํ
CalculatorTest ํด๋์ค์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์๋ค.
import org.hyunjung.Calculator
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
class CalculatorTest {
private lateinit var calculator: Calculator
@Before
fun setUp() {
calculator = Calculator()
}
@Test
fun testAddition() {
val result = calculator.add(10, 20)
assertEquals(30, result)
}
@Test
fun testSubtraction() {
val result = calculator.subtract(50, 30)
assertEquals(20, result)
}
@Test(expected = IllegalArgumentException::class)
fun testDivisionByZero() {
calculator.divide(10, 0)
}
}
ํด๋น ํ ์คํธ ์ฝ๋๋ add์ subtract์ ์ ์ ๋์์ ํ์ธํ๊ณ ,
divide์์๋ 0์ผ๋ก ๋๋ ์ ์๋ ์์ธ ์ฒ๋ฆฌ๊น์ง ํฌํจํ ์ผ์ด์ค๋ฅผ ๋ค๋ฃจ๋ ํ ์คํธ ์ฝ๋์ด๋ค.
4. ํ ์คํธ ์คํํ๊ธฐ
ํ ์คํธ ํด๋์ค ์ด๋ฆ์ด๋ ๋ฉ์๋ ์ด๋ฆ ์์ ์๋ ์ฌ์ ๋ฒํผ ์์ด์ฝ ํด๋ฆญ!
๋ค ์ด๋ก์ ์ฒดํฌ ํ์(ํ ์คํธ ํต๊ณผ)๊ฐ ๋๋ฉด ํฌ์ด์ ๋๊ปด์ค์๋ค !
๐ ํธ๋ฌ๋ธ ์ํ
๋ง์ฝ, ํ ์คํธ ์ฝ๋ ์คํ ์ ๋น๋๊ฐ ์๋๋ค๋ฉด Settings์ ๋ค์ด๊ฐ์ ํด๋น ์์ฑ์ ํ์ธ
ํ ์คํธ ์ฝ๋ ์์ฑ ํ
- ์์ ๋จ์๋ก ์ชผ๊ฐ์ ํ ์คํธ ์์ฑ: ํ ๋ฒ์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ํ ์คํธํ๊ธฐ๋ณด๋ค๋, ๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ ์์ ๋จ์๋ก ๋๋ ํ ์คํธ
- ์ดํดํ๊ธฐ ์ฌ์ด ์ด๋ฆ ์ง๊ธฐ: ํ ์คํธ ๋ฉ์๋ ์ด๋ฆ์ ํ ์คํธ ๋ชฉ์ ์ด ํ๋์ ๋ณด์ด๋๋ก ์์ฑ
- ์์ฃผ ์คํํ๊ธฐ: ๊ฐ๋ฐ ๋์ค์๋ ์ฃผ๊ธฐ์ ์ผ๋ก ํ ์คํธ๋ฅผ ์คํํด์ ์ค๋ฅ๋ฅผ ๋นจ๋ฆฌ ์ก์๋ด๊ธฐ
'Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝํ๋ฆฐ Kotlin 2์ฐจ์ ๋ฐฐ์ด ์ถ๋ ฅํ๊ธฐ (0) | 2024.07.24 |
---|---|
์ฝํ๋ฆฐ Kotlin java.util.ConcurrentModificationException ์๋ฌ (0) | 2024.07.11 |
์ฝํ๋ฆฐ Kotlin split("")์ด ์ ๋๋ก ๋์ํ์ง ์๋ ์ด์ (2) | 2023.12.03 |
Kotlin ์ฝํ๋ฆฐ ๋ฌธ์์ด ๋์๋ฌธ์ ํจ์๋ค(toUpperCase, caplitalize ๋ฑ) Deprecated๋ ์ด์ (0) | 2023.03.10 |
Kotlin ์ฝํ๋ฆฐ ์ฝ๋ฉ ์ปจ๋ฒค์ (0) | 2022.12.02 |