๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

JUnit ์‚ฌ์šฉ๊ธฐ (feat. IntelliJ)

by young-ji 2022. 10. 26.

JUnit : ์ž๋ฐ” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์„ ์œ„ํ•œ ํ…Œ์ŠคํŒ… ํ”„๋ ˆ์ž„์›Œํฌ

JUnit ์‹œ์ž‘ํ•˜๊ธฐ

Java(no Spring) , IntelliJ (2022.2.3 ver), gradle ์‚ฌ์šฉ

 

Junit์€  spring-boot-starter-test dependency์— ํฌํ•จ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค. Spring Initializr์‹œ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋˜์–ด์ง„๋‹ค. 

 

maven dependency

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

 

ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  gradle ๋นŒ๋“œ๋ฅผ ๋งˆ์น˜๋ฉด ์ž๋™์œผ๋กœ test ํด๋”๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

ํ…Œ์ŠคํŠธ ํด๋”๋ฅผ ์šฐํด๋ฆญํ•ด์„œ ์ง์ ‘ test class ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด๋„ ๋˜๊ณ  test ์›ํ•˜๋Š” class๋ฅผ ์šฐํด๋ฆญํ•ด์„œ test ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด๋„๋œ๋‹ค.

 

testing library์— JUnit์„ ์„ ํƒํ•˜๊ณ  ํ•˜๋‹จ์— ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋‚˜์˜ค๋ฉด fix๋ฅผ ๋ˆŒ๋Ÿฌ ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค.

 


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

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

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

ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์„ ๊ธฐ์ค€์œผ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ. ์—ฌ๊ธฐ์„œ ๋ชจ๋“ˆ์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž‘๋™ํ•˜๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ชจ๋ฒ”

  • 1๊ฐœ์˜ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜๋Š” 1๊ฐ€์ง€ ๊ฐœ๋… ๋งŒ์„ ํ…Œ์ŠคํŠธ ํ•˜๋ผ.
  • ๋ช…ํ™•ํ•˜๊ณ  ์ผ๊ด€๋œ ๋„ค์ด๋ฐ ๊ทœ์•ฝ์„ ์ค€์ˆ˜ํ•˜๋ผ
  • ๋ฐ์ŠคํŠธ ์•ˆ์— ์˜๋„์™€ ๋ชฉ์ ์ด ๋“ค์–ด๋‚˜๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค. (์–ด๋–ค ์กฐ๊ฑด - ์–ด๋–ค ์ˆ˜ํ–‰ - ์–ด๋–ค ๊ฒฐ๊ณผ)
  • ์–ด๋–ค ๋ชจ๋“ˆ์—์„œ ์ฝ”๋“œ ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ ๋ชจ๋‘˜์— ๋Œ€ํ•ด ์ƒ์‘ํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด๋ค„์ค˜์•ผํ•œ๋‹ค.
  • 1๊ฐœ์˜ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜์— ๋Œ€ํ•ด assert๋ฅผ ์ตœ์†Œํ™” ํ•˜๋ผ.

 

 

์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์†์„ฑ (FIRST)

  • Fast : ์‹คํ–‰์ด ๋นจ๋ผ์•ผํ•œ๋‹ค.
  • Independent : ํ…Œ์ŠคํŠธ ํ•˜๊ณ ์ž ํ•˜๋Š” ๋‹จ์œ„ ๊ธฐ๋Šฅ์— ์ง‘์ค‘๋˜์•ผํ•œ๋‹ค. ๋…๋ฆฝ์ ์ด๋ฉฐ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Repeatable : ๋ฐ˜๋ณต์ด ๊ฐ€๋Šฅํ•ด์•ผํ•˜๋ฉฐ, ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•œ๋‹ค.
  • Self-Validating : ์ž์ฒด ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ•ด์•ผํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ์ž์ฒด์ ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์•Œ์ˆ˜์žˆ์–ด์•ผํ•œ๋‹ค.
  • Timely : ์ ์‹œ์—, ์‹ค์ œ ๊ตฌํ˜„ ์ง์ „์— ๊ตฌํ˜„๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

์ฃผ์˜ ์‚ฌํ•ญ

  • ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ๊ฒƒ ์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ผ.
    • ‘์ค‘๋ณต์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ์งฐ์œผ๋‹ˆ๊นŒ ์ค‘๋ณต ์ฒดํฌ๋Š” ์•ˆํ•ด๋„ ๋ ๊บผ์•ผ’ ๋ผ๋Š” ์ƒ๊ฐ ๋ฒ„๋ฆฌ๊ธฐ. ๊ตฌํ˜„์€ ์–ธ์  ๊ฐ€ ์–ด๋–ป๊ฒŒ๋“  ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ตฌํ˜„์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ์„ค๊ณ„์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

 

  • private ๋ฉ”์†Œ๋“œ ํ…Œ์ŠคํŠธ
    • private ํ–‰์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(์ƒ์œ„ ๋ฉ”์†Œ๋“œ) ํ…Œ์ŠคํŠธ๋งŒ ์ถ”๊ฐ€๋ ๋ฟ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ์•ˆ์ชฝ(private ๋ฉ”์†Œ๋“œ)๊นŒ์ง€ ๋“ค์—ฌ๋‹ค๋ณผ ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ–ˆ์„๋•Œ ๋ญ”๊ฐ€ ์–ด์„คํ”„๊ณ  ์ด์ƒํ•˜๋‹ค ์‹ถ์œผ๋ฉด privateํ•จ์ˆ˜๊ฐ€ ๊ทธ ์•ˆ์— ์žˆ์ง€ ์•Š์•˜์–ด์•ผํ•  ํ™•๋ฅ ์ด ํฌ๋‹ค. ์ฆ‰ ์ฝ”๋“œ ๊ตฌํ˜„์„ ์ž˜๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ!

  • Non-testable
    • Random, LocalDate.now(),Shuffle
    • ์™ธ๋ถ€ ์„ธ๊ณ„ (HTTP, ์™ธ๋ถ€ ์ €์žฅ์†Œ)
    → Non-testable์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ฒฐ๊ตญ ๋ฐ”๊นฅ์ชฝ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ค ์‹์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผํ• ๊นŒ?

 

์œ ํŠœ๋ธŒ์— ์˜ฌ๋ผ์˜จ ์Šคํ”„๋ง์บ ํ”„ ์„ธ์…˜์„ ๋ณด๊ณ  ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์— ๊ด€ํ•ด ์ข‹์€ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์œ ์ตํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ๊ผญ ๋ณด์‹œ๊ธธ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค! ์ถœ์ฒ˜ → https://www.youtube.com/watch?v=YdtknE_yPk4&ab_channel=springcamp.io

 

 

 

๋‹จ์ •๋ฌธ(assert)

์ ํ•ฉ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋กœ ‘~ํ•˜๊ธธ ๊ธฐ๋Œ€ํ•œ๋‹ค’ ์ •๋„๋กœ ํ•ด์„ํ•˜๋ฉด ๋ ๊ฒƒ๊ฐ™๋‹ค.

 

assertEquals(a, b) : ๊ฐ์ฒด a์™€ b๊ฐ€ ๊ฐ™์€ ๊ฐ’์ธ์ง€ ํ™•์ธ

assertSame(a, b) : ๊ฐ์ฒด a์™€ b๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€ ํ™•์ธ

assertNull(a) / assertNotNull(a) : a๊ฐ€ null ์ธ์ง€/์•„๋‹Œ์ง€ ํ™•์ธ

assertTrue(a) / assertFalse(a) : a๊ฐ€ ์ฐธ์ธ์ง€/๊ฑฐ์ง“์ธ์ง€ ํ™•์ธ

assertArrayEquals(๋ฐฐ์—ด1, ๋ฐฐ์—ด2) : ๋ฐฐ์—ดa์™€ b๊ฐ€ ๊ฐ™์€์ง€ ํ™•์ธ

 

assertThat : ๊ฒ€์ฆ ๊ฐ’์ด ํŠน์ • ์ƒํ™ฉ์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์ฆ

JUnit 4.4๋ถ€ํ„ฐ asserThat ๋ฉ”์†Œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋๋‹ค. ์—ฌ๋Ÿฌ matcher๋ฅผ ์ง€์›ํ•˜์—ฌ ์ข€ ๋” ์œ ์—ฐ์„ฑ ์žˆ๊ฒŒ ๋‹จ์ •๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ  → https://jongmin92.github.io/2020/03/31/Java/use-assertthat/

๊ทธ์™ธ ๋‹ค์–‘ํ•œ ๋‹จ์ •๋ฌธ ํ™•์ธ → https://junit.sourceforge.net/javadoc/org/junit/Assert.html

 

 

 

์ด๋…ธํ…Œ์ด์…˜(@)

 

@Test : ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋งค์†Œ๋“œ์ž„์„ ๋ช…์‹œ (static & private X), timeout/exception์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ • ๊ฐ€๋Šฅ

@BeforeClass : ๋ชจ๋“  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ „ ์ตœ์ดˆ ํ•œ๋ฒˆ ์‹คํ–‰ (DB ์—ฐ๊ฒฐ ์‹œ ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋“ฑ์„ ํ…Œ์ŠคํŠธ ํ•ฉ๋‹ˆ๋‹ค.)

@AfterClass : ๋ชจ๋“  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํ›„ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•œ๋ฒˆ ์‹คํ–‰

@BeforeEach : ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ „๋งˆ๋‹ค ์‹คํ–‰

@AfterEach : ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํ›„๋งˆ๋‹ค ์‹คํ–‰

@Disabled : ํ•ด๋‹จ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ

@DiaplayName : ์‹คํ–‰ ์ฐฝ์— ํ•ด๋‹น ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๋ฉ”์†Œ๋“œ ๋ช… ๋Œ€์‹  parameter ๊ฐ’์„ ์ถœ๋ ฅ

 

์‹คํ–‰์ˆœ์„œ : @BeforeClass → @BeforeEach → @Test → @AfterEach → @AfterClass

 

 

๊ณ„์‚ฐ๊ธฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

์ œ๊ฐ€ ๋ง˜๋Œ€๋กœ ์งœ๋ดค์Šต๋‹ˆ๋‹ค..^&^

class postfixCalculationTest {
    private static Calculation calculation = new postfixCalculation();

    // 1. ์ž˜๋ชป๋œ ํ‘œํ˜„์˜ input ํ…Œ์ŠคํŠธ
    @DisplayName("์ˆซ์ž์™€ ์‚ฌ์น™์—ฐ์‚ฐ์ž๋งŒ ์ œ์™ธํ•œ ๋ฌธ์ž ์ž…๋ ฅ ํ…Œ์ŠคํŠธ")
    @Test
    void CalculatorOtherInput(){
        final String input = "4 % 7";
        Optional<String> result = calculation.getResult(input);
        assertSame(Optional.empty(),result);
    }

    @DisplayName("์—ฐ์‚ฐ์ž์™€ ์ˆซ์ž ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์ด ํฌํ•จ๋˜์ง€์•Š์€ ์ž…๋ ฅ ํ…Œ์ŠคํŠธ")
    @Test
    void CalculatorNonSpaceInput(){
        final String input = "7+3-1";
        Optional<String> result = calculation.getResult(input);
        assertSame(Optional.empty(),result);
    }

    @DisplayName("ํ”ผ์—ฐ์‚ฌ์ž ์ž์—ฐ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ž…๋ ฅ ํ…Œ์ŠคํŠธ")
    @Test
    void CalculatorNonNatualNumInput(){
        final String input = "2.2 + 7";
        Optional<String> result = calculation.getResult(input);
        assertSame(Optional.empty(),result);
    }

    // 2. ๊ณ„์‚ฐ ๊ฒฐ๊ณผ ํ…Œ์ŠคํŠธ
    @DisplayName("์˜ฌ๋ฐ”๋ฅธ ๊ณ„์‚ฐ - ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ๋ฏธํฌํ•จ")
    @Test
    void CalculatorBasicOperator(){
        final String input = "7 * 20 - 9";
        Optional<String> result = calculation.getResult(input);
        assertEquals("131",result.get());
    }

    @DisplayName("์˜ฌ๋ฐ”๋ฅธ ๊ณ„์‚ฐ - ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ํฌํ•จ")
    @Test
    void CalculatorOrderOfOperator(){
        final String input = "82 + 2 * 4";
        Optional<String> result = calculation.getResult(input);
        assertEquals("90",result.get());
    }

}

 


 

โž•

@ParameterizedTest

์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ ์ด๋…ธํ…Œ์ด์…˜. 

์œ„ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋งŽ์€ ์ฝ”๋“œ๋Š” ์ข‹์€ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ฉฐ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

1. gradle dependency ์ถ”๊ฐ€

testImplementation 'org.junit.jupiter:junit-jupiter-params:5.4.2'

2. ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

class OperatorTest {

    DecimalFormat resultBuffer = new DecimalFormat("#.##");

    @ParameterizedTest(name = "{index}: {0}")
    @MethodSource("calculateParameters")
    @DisplayName("์‚ฌ์น™์—ฐ์‚ฐ ๊ณ„์‚ฐ")
    void calculate(String name, double num1, double num2, String operator, String result) {
        assertEquals(resultBuffer.format(Operator.of(operator).result(num1,num2)),result);
    }

    private static Stream<Arguments> calculateParameters() {
        return Stream.of(
                Arguments.of("๋”ํ•˜๊ธฐ",1,2,"+","3"),
                Arguments.of("๋นผ๊ธฐ",3,5,"-","-2"),
                Arguments.of("๊ณฑํ•˜๊ธฐ",77,3,"*","231"),
                Arguments.of("๋‚˜๋ˆ„๊ธฐ",2,7,"/","0.29")
        );
    }

    @ParameterizedTest(name = "{index}: {2}")
    @MethodSource("validParameters")
    @DisplayName("์—ฐ์‚ฐ์ž ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ")
    void validOperator(double num1, double num2, String operator, String errMsg){
        Exception error = assertThrows(Exception.class,()-> Operator.of(operator));
        assertEquals(error.getMessage(),errMsg);
    }

    private static Stream<Arguments> validParameters(){
        return Stream.of(
                Arguments.of(1,2,"%","์ž…๋ ฅ ์˜ค๋ฅ˜ : ์ž˜๋ชป๋œ ์—ฐ์‚ฐ์ž ํ˜น์€ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."),
                Arguments.of(3,5,"dd","์ž…๋ ฅ ์˜ค๋ฅ˜ : ์ž˜๋ชป๋œ ์—ฐ์‚ฐ์ž ํ˜น์€ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."),
                Arguments.of(77,3,"&","์ž…๋ ฅ ์˜ค๋ฅ˜ : ์ž˜๋ชป๋œ ์—ฐ์‚ฐ์ž ํ˜น์€ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.")
        );
    }

}

 


ํ…Œ์ŠคํŠธ ์‹คํ–‰

์ž‘์„ฑ์„ ๋งˆ์นœ๋’ค ํ…Œ์ŠคํŠธ class๋ฅผ Run ์‹œํ‚ค๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

ํ†ต๊ณผ๋œ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


๋งˆ์น˜๋ฉฐ

์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ์— ๊ด€ํ•ด ์ฐพ์•„๋ณผ์ˆ˜๋ก ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•ด์•ผํ•  ๋ถ„์•ผ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋ก ์ด๋‚˜ TDD์— ๊ด€ํ•ด์„œ๋„ ์ง€์†๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„  ํ•„์ˆ˜๋กœ ์ตํž ํ•„์š”๊ฐ€ ์žˆ์–ด๋ณด์ธ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์•ž์œผ๋กœ๋„ ํ™”์ดํŒ…

 

 

 

reference.

https://mangkyu.tistory.com/143

https://sakjung.tistory.com/33

https://www.youtube.com/watch?v=YdtknE_yPk4&ab_channel=springcamp.io

https://jongmin92.github.io/2020/03/31/Java/use-assertthat/

 

 

์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€์„ ํ†ตํ•ด ์•Œ๋ ค์ฃผ์„ธ์š”. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. 

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] a.equlas(b)๋ณด๋‹ค๋Š” Object.equlas(a,b) ์‚ฌ์šฉํ•˜๊ธฐ  (0) 2022.12.01
Java์˜ ๋žŒ๋‹ค (Lambda)  (0) 2022.10.31

๋Œ“๊ธ€