본문 바로가기
카테고리 없음

JUnit5 와 AssertJ 비교해보자

by 잉ㅈI 2023. 10. 27.

ㅎㅎ.. AssertJ를 더욱 많이 쓰긴 하지만, 그래도 비교해서 정리해보았다!

Assertions - 값 검증

1. JUnit5

1) AssertEquals

assertEquals(expected, actual, {message})는 실제 값(actual)이 기대한 값(expected)과 같은지 확인한다

@Test
void numberTest() {
        assertEquals(1, 2, "숫자 비교"); //테스트 실패
}
  • 결과
  • 숫자 비교 ==> expected: <1> but was: <2> Expected :1 Actual :2

2) AssertNull(actual)

assertNull(actual, {message})는 값이 null인지 확인한다.

@Test
void fail() {
		String name = null;
		assertNull(name, "name is null"); //테스트 통과
}

3) AssertNotNull(actual)

assertNotNull(actual, {message})는 값이 null이 아닌지 확인한다.

@Test
void success() {
	String name = "jiwon";
	assertNotNull(name, "name is not null"); //테스트 통과
 }

4) AssertTrue(boolean)

assertTrue(actual, {message})는 다음 조건이 참(true)인지 확인한다.

@Test
void arithmeticTrue() {
	int a = 3;
	int b = 10;
	assertTrue(a < b, "a가 b보다 커야 한다."); //테스트 통과
    }

5) AssertFalse(boolean)

assertFalse(actual, {message})는 다음 조건이 참(false)인지 확인한다.

@Test
 void arithmeticFalse() {
	int a = 3;
	int b = 10;
	assertFalse(a > b, "a가 b보다 커지 말아야 한다."); //테스트 통과(거짓이므로)
}

2. AssertJ

 💡 AssertJ가 좀더 코드 가독성이 높다! 예제 두개로 빠르게 살펴보자

numberTest()

@Test
void numberTest() throws Exception {
        assertThat(8) // 주어진 8 숫자는
                .isZero() // 0이고,
                //.isNotZero() // 0이 아니고, (테스트를 위해 일단 주석처리)
                .isPositive() // 양수 이고,
                .isEqualTo(8); // 8과 일치한다. 
    } //테스트 통과

stringTest()

@Test
void stringTest() {
     assertThat("Hello, world! Nice to meet you.") // 주어진 "Hello, world! Nice to meet you." 문자열은
              .isNotEmpty() // 비어있지 않고
              .contains("Nice") // "Nice"를 포함하고
              .contains("world") // "world"도 포함하고
              .doesNotContain("ZZZ") // "ZZZ"는 포함하지 않으며
              .startsWith("Hell") // "Hell"로 시작하고
              .endsWith("u.") // "u."로 끝나며
              .isEqualTo("Hello, world! Nice to meet you."); // "Hello, world! Nice to meet you."과 일치한다.
    } //테스트 통과

부동소수점 수를 두 개 비교

@Test
    public void doubleTest() {
        Double a = 0.1;
        Double b = 0.2;
        Double c = 0.3;
        assertEquals(a + b, c); //테스트 실패(JUnit)
				assertThat(a+b).isEqualTo(c); //테스트 실패(AssertJ)
    }
expected: <0.30000000000000004> but was: <0.3>
Expected :0.30000000000000004
Actual   :0.3

수정 방법

→ 두 double 값을 오차 범위 내에 있는지 확인하면 된다!

assertEquals(c, a + b, 0.0001); // JUnit
assertThat(a + b).isEqualTo(c, offset(0.0001)); //AssertJ

예외처리

  • JUnit5에서 예외처리는 assertThrows 메서드를 사용하여 수행

(^^,, JUnit4에서의 @Test(expected=InsufficientFundsException.class)

expected 속성 사라짐 .. ㄱ-)

예상되는 예외의 유형과 람다 식을 통해 테스트 중인 코드를 전달할 수 있는 실행 가능한 기능 인터페이스를 사용