ㅎㅎ.. 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 속성 사라짐 .. ㄱ-)
예상되는 예외의 유형과 람다 식을 통해 테스트 중인 코드를 전달할 수 있는 실행 가능한 기능 인터페이스를 사용