티스토리 뷰

■ 기본적인 @BeforeEach > @Test > @AfterEach 순의 코드수행 흐름
■ assertThat().isEqualTo()
(물론 @Test 메소드가 여러개라면, 각 @Test 메소드 전후로 @Before/AfterEach 메소드가 중복 수행됨)

public class CalculatorTest {
    StringCalculator stringCalculator;

    @BeforeEach
    void setUp() {
        stringCalculator = new StringCalculator();
    }

    @Test
    void 복합_계산() {
        assertThat(stringCalculator.calculate("5 * 2 + 2")).isEqualTo(12);
        assertThat(stringCalculator.calculate("12 + 3 * 2")).isEqualTo(30);
        assertThat(stringCalculator.calculate("100 / 25 + 5")).isEqualTo(9);
    }

    @AfterEach
    void tearDown() {
        stringCalculator = null;
    }
}

■ assertThat().isInstanceOfAny(), isExactlyInstanceOf
객체를 @equals()와 @hashcode()를 overriding해서 isEqualTo로 완전히 같은지 비교해도 되지만,
단순히 클래스 확인이라면 이 방법도 사용가능

@Test
    void constructor_normal() {
        assertThat(new Money("1000")).isInstanceOfAny(Money.class);
    }

■ assertThat().isTrue() / isFalse()

public class ValidatorTest {
    @Test
    void 정상_통과() {
        assertThat(Validator.isValid("10 + 2 / 6")).isTrue();
    }

    @Test
    void 정규식_통과_실패() {
        assertThat(Validator.isRightFormat("+ 3 + 3")).isFalse();
        assertThat(Validator.isRightFormat("10 + * 5")).isFalse();
        assertThat(Validator.isRightFormat("10 ^ 2")).isFalse();
        assertThat(Validator.isRightFormat("2")).isFalse();
    }
}

■ assertThrows()를 통한 예외처리

public class RacingTest {
    List<Car> cars;

    @BeforeEach
    void setUp() {
        cars = new ArrayList<>();
        cars.add(new Car("pobi"));
        cars.add(new Car("sean"));
    }

    @Test
    void 차량이름_중복() {
        cars.add(new Car("pobi"));

        assertThrows(IllegalArgumentException.class, () -> {
            new Racing(cars, 3);
        });
    }
}

■ assertThatIllegalArgumentException().isThrownBy()를 통한 예외처리

@Test
    void constructor_with_character() {
        assertThatIllegalArgumentException().isThrownBy(() -> {
            new Money("abc");
        });
    }

■ assertThat().containsExactly() / containsExactlyInAnyOrder()

public class WinnerTest {
    @Test
    void 우승자_선정() {
        List<Car> cars = Arrays.asList(
                new Car("pobi", 3), new Car("sean", 2)
                , new Car("denis", 3), new Car("ms", 1));
        Winner winner = new Winner(cars);

        assertThat(winner.getWinners()).containsExactlyInAnyOrder("pobi", "denis");
    }
}

JUnit 5 Tutorial: Writing Assertions With AssertJ

■ 다음과 같이 정밀도를 지정할 수 있다.

junit : assertEquals(1.414, line.length(), 0.001);
assertj : assertThat(line.length()).isEqualTo(1.414, offset(0.00099));
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함