Kotlin

IntelliJ์—์„œ JUnit4 ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ • ๋ฐ ๋ฐฉ๋ฒ•

๋…ธ๋ฃจ๋ฃฝ 2024. 12. 22. 01:50

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ธฐ๋Šฅ ์ฝ”๋“œ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ
  • ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์‹œ๊ฐ„์— ์ซ“๊ธฐ๋‹ค ๋ณด๋‹ˆ 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์—์„œ ์„ ํƒํ•œ ํ›„

  1. ํด๋ž˜์Šค ์ด๋ฆ„ ์œ„์—์„œ Alt + Enter
  2. "Create Test"๋ฅผ ์„ ํƒ
  3. ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ 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์— ๋“ค์–ด๊ฐ€์„œ ํ•ด๋‹น ์†์„ฑ์„ ํ™•์ธ

 


 

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ํŒ

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