2021. 8. 13. 12:38ㆍJAVA/JUNIT
글의 목적
- 햄크레스트(Hamcrest) 라이브러리를 활용하여 단언을 활용하는 방법 실습
- 예외가 발생하는 테스트를 작성하는 방법 실습
3.1 JUnit 단언
JUnit에서 단언은 테스트에 넣을 수 있는 정적 메서드 호출입니다. 각각의 단언은 어떤 조건이 참인지 검증하는 방법입니다. 단언한 조건이 참(True)이 아니면 테스트는 그 자리에서 멈추고 실패를 보고합니다.
JUnit이 제공하는 두 가지 단언 스타일
- JUnit에서 기존 버전에 포함되어 있는 전통적인 단언 스타일(assertTrue, ... 등)
- 햄크레스트(Hamcrest) 라이브러리를 활용한 단언 스타일
햄크레스트란 무엇인가?
햄크레스트(Hamcrest)는 jMock이라는 Mock 라이브러리 저자들이 참여해 만들고 있는 Matcher 라이브러리입니다. 테스트 표현식을 작성할 때 좀 더 문맥적으로 자연스럽고, 우아한 문장을 만들 수 있게 도와줍니다.
3.1.1 assertTrue
테스트 표현식의 boolean 값이 True라고 예상을 하는 메소드입니다. 만약 테스트 표현식이 True가 아닌 False인 경우 테스트를 중단하고 오류를 알려줍니다.
@Test
public void hasPositiveBalance() {
account.deposit(50);
assertTrue(account.hasPositiveBalance());
}
@Test
public void depositIncreasesBalance() {
int initialBalance = account.getBalance();
account.deposit(100);
assertTrue(account.getBalance() > initialBalance);
}
3.1.2 assertThat은 명확한 값을 비교
대부분의 단언은 기대하는 값과 반환된 실제 값을 비교합니다. 하지만 aseertThat은 명시적으로 기대하는 값을 단언합니다.
assertThat(account.getBalance(), equalTo(100));
assertThat() 정적 메서드는 햄크레스트 단언의 예입니다.
햄크레스트 단언 메소드 구성
- 첫번째 인자 : 실제 표현식, 즉 검증하고자 하는 값(종종 대상 시스템에 대한 메서드 호출)입니다.
- 두번째 인자 : 매처(matcher), 매처는 실제 값과 표현식의 결과를 비교합니다. 매처는 테스트의 가독성을 크게 높여줍니다.
햄크레스트 매치를 사용하기 위한 정적 임포트 추가
import static org.hamcrest.CoreMatchers.*;
equalTo 매처
- equalTo 매처 메서드에는 어떤 자바 인스턴스나 기본형 값이라도 넣을 수 있습니다.
- equalTo 매처는 비교 기준으로 equals() 메서드를 사용합니다.
3.1.3 중요한 햄크레스트 매처 살펴보기
1. equalTo()
값, 자바 배열 혹은 컬렉션 객체를 비교할 때 사용
@Test
public void comparesCollectionsPassing() {
assertThat(Arrays.asList(new String[] {"a"}),
equalTo(Arrays.asList(new String[] {"a"})));
}
2. is 장식자(decorator)
is 장식자를 추가하여 매처 표현의 가독성을 높일 수 있습니다. is 장식자는 단지 넘겨받은 매처를 반환할 뿐 아무것도 하지 않습니다. 오직 개발의 가독성을 위하여 사용됩니다.
assertThat(account.getName(), is(equalTo("my big fat acct")));
3. not 매처
not 매처를 추가하여 어떤 것을 부정하는 단언을 만듭니다.
assertThat(account.getName(), not(equalTo("plunderings")));
4. nullValue(), notNullValue()
- nullValue() : 테스트 표현식이 null값인지 비교
- notNullValue() : 테스트 표현식이 not null인지 비교
assertThat(account.getName(), is(not(nullValue())));
assertThat(account.getName(), is(notNullValue()));
3.1.4. 부동소수점 수를 두 개 비교
isCloseTo 매처를 활용한 부동소수점 수 비교
@Test
public void assertDoublesCloseTo() {
assertThat(2.32 * 3, closeTo(6.96, 0.0005));
}
References
자바와 JUnit을 활용한 실용주의 단위 테스트
햄크레스트란 무엇인가? : https://blog.daum.net/jungjin1980/578
github : https://github.com/yonghwankim-dev/JUNIT-study/tree/main/iloveyouboss_13/test
'JAVA > JUNIT' 카테고리의 다른 글
AssertJ 테스트시 객체의 동등성(Equality) 검증 방법 (0) | 2024.04.07 |
---|---|
3.2 예외를 기대하는 세 가지 방법 (0) | 2021.08.13 |
2.1 JUNIT 테스트 고려사항 구현 (0) | 2021.08.11 |
2. JUNIT 사용 (1) | 2021.08.11 |
1. 첫번째 JUnit 테스트 만들기 (0) | 2021.08.10 |