λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
TIL

02/23(금) 내일배움캠프 Java 43일차 TIL - Given - When - Then

by 감자개발꾼 2024. 2. 24.

 

πŸ“–  μ˜€λŠ˜μ˜ ν•™μŠ΅ ν‚€μ›Œλ“œ

  • Given - When - Then

 

πŸ₯”  Given - When - Then

: Given - When - Then νŒ¨ν„΄μ€ Test Code μŠ€νƒ€μΌμ„ ν‘œν˜„ν•˜λŠ” 방식을 λœ»ν•©λ‹ˆλ‹€.

 

Given

: ν…ŒμŠ€νŠΈ ν•˜κ³ μžν•˜λŠ” λŒ€μƒμ„ μ‹€μ œλ‘œ μ‹€ν–‰ν•˜κΈ° 전에 ν…ŒμŠ€νŠΈμ— ν•„μš”ν•œ κ°’(μƒνƒœ)을 미리 μ„ μ–Έν•΄ λ‘‘λ‹ˆλ‹€.

 

When

: ν…ŒμŠ€νŠΈ ν•˜κ³ μžν•˜λŠ” λŒ€μƒμ„ μ‹€μ œλ‘œ μ‹€ν–‰ μ‹œν‚΅λ‹ˆλ‹€.

 

Then

: μ–΄λ–€ νŠΉμ •ν•œ 행동(ν…ŒμŠ€νŠΈ λŒ€μƒ μ‹€ν–‰) λ•Œλ¬Έμ— λ°œμƒν• κ±°λΌκ³  μ˜ˆμƒλ˜λŠ” 결과에 λŒ€ν•΄ μ—μΈ‘ν•˜κ³  λ§žλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

 

class CalculatorTest {

    Calculator calculator;

    @BeforeEach
    void setUp() {
        calculator = new Calculator();
    }

    @Test
    @DisplayName("계산기 μ—°μ‚° 성곡 ν…ŒμŠ€νŠΈ")
    void test1() {
        // given
        int num1 = 5;
        String op = "/";
        int num2 = 2;

        // when
        Double result = calculator.operate(num1, op, num2);

        // then
        assertNotNull(result);
        assertEquals(2.5, result);
    }

    @Test
    @DisplayName("계산기 μ—°μ‚° μ‹€νŒ¨ ν…ŒμŠ€νŠΈ : λΆ„λͺ¨κ°€ 0일 경우")
    void test1_1() {
        // given
        int num1 = 5;
        String op = "/";
        int num2 = 0;

        // when
        Double result = calculator.operate(num1, op, num2);

        // then
        assertNull(result);
    }

    @Test
    @DisplayName("계산기 μ—°μ‚° μ‹€νŒ¨ ν…ŒμŠ€νŠΈ : μ—°μ‚°μžκ°€ 잘λͺ»λμ„ 경우")
    void test1_2() {
        // given
        int num1 = 5;
        String op = "?";
        int num2 = 2;

        // when - then
        IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> calculator.operate(5, "?", 2));
        assertEquals("잘λͺ»λœ μ—°μ‚°μžμž…λ‹ˆλ‹€.", exception.getMessage());
    }
}

 

πŸ₯”  F.I.R.S.T 원칙

쒋은 ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ F.I.R.S.T 원칙

 

Fast : λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” λΉ¨λΌμ•Όν•œλ‹€.

Independent : λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” 각각의 ν…ŒμŠ€νŠΈκ°€ μ—°κ΄€λ˜μ§€ μ•Šκ³ , κ³ λ¦½λ˜μ–΄μ•Ό ν•œλ‹€. 즉, 독립적이어야 ν•œλ‹€.

Repeatable : λ‹¨μœ„ν…ŒμŠ€νŠΈλŠ” 반볡 κ°€λŠ₯ν•΄μ•Όν•œλ‹€. 반볡적으둜 μ‹œν–‰ν•΄λ„ κ²°κ³ΌλŠ” κ°™μ•„μ•Ό ν•œλ‹€.

Self-validating : 자체적으둜 ν…ŒμŠ€νŠΈ κ²°κ³Όκ°€ λ„μΆœλ˜μ•Όν•œλ‹€.

(κ°œλ°œμžκ°€ print μ°μ–΄μ„œ λΉ„κ΅ν•˜λŠ”κ²Œ μ•„λ‹ˆκ³ , μžλ™μœΌλ‘œ μˆ˜ν–‰λ˜λ©° 성곡/μ‹€νŒ¨μ˜ κ²°κ³Όκ°€ λ‚˜μ˜€λŠ” 것)

Timely : λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” μ‹€μ œ μ½”λ“œλ³΄λ‹€ λ¨Όμ € κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. (TDD일 κ²½μš°μ—λ§Œ ν•΄λ‹Ή)

πŸ“š  μ˜€λŠ˜μ˜ 회고

주말 μ—΄μ‹¬νžˆ ν•©μ‹œλ‹€!!