728x90
반응형
Junit을 사용할 때 Hamcrest 프레임워크를 사용하면 가독성은 물론이고 코드의 조건을 조금 더 손쉽게 확인할 수 있다.
Hamcrest란?
Hamcrest는 소프트웨어 테스트를 위한 framework.
기존의 matchers 클래스를 통해 코드의 조건을 확인할 수 있음
Junit에서 Hamcrest matcher를 사용하려면 assertThat 문 뒤에 하나 또는 여러 개의 matchers를 사용한다.
⇒ Hamcrest는 최대한 가독성이 있는 test scripts를 가지는 것을 목표로 하고 있음
boolean a;
boolean b;
assertThat(a, equalTo(b));
assertThat(a, is(equalTo(b));
assertThat(a, is(b)); // is 메소드는 equalTo(value)에 대한 thin wrapper
복잡한 단언문을 서술적으로 가독성 높게 작성 가능
Junit4에서 통합 지원, assertThat(T actual, Matcher<T> matcher)
- 핵심 매처 : org.hamcrest.CoreMatchers
- 전체 매처 : org.hamcrest.Matchers
Junit4 assert statements와 Hamcrest matchers를 비교
// JUnit 4 for equals check
assertEquals(expected, actual);
// Hamcrest for equals check
assertThat(actual, is(equalTo(expected)));
// JUnit 4 for not equals check
assertNotEquals(expected, actual)
// Hamcrest for not equals check
assertThat(actual, is(not(equalTo(expected))));
// Junit4
assertTrue(result instanceof String);
// Hamcrest
assertThat(result, instanceOf(String.class));
// Junit4
assertTrue(result.contains("x") || result.contains("y") || result.contains("z"))
// Hamcrest
assertThat(result, is(hasItem(anyOf(equalTo("x", equalTo("y"), equalTo("z"))))));
Hamcrest 매처 사용하기
pom.xml에 추가
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
spring boot에서는 다음 starter를 추가하면 자동으로 junit, hamcrest, SpringTest 등을 추가해준다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Hamcrest 사용하기
Hamcrest matcher
다음은 가장 중요한 Hamcrest matchers들의 모음이다.
allOf
- matches if all matchers match (short circuits)anyOf
- matches if any matchers match (short circuits)not
- matches if the wrapped matcher doesn’t match and viceequalTo
- test object equality using the equals methodis
- decorator for equalTo to improve readabilityhasToString
- test Object.toStringinstanceOf
,isCompatibleType
- test typenotNullValue
,nullValue
- test for nullsameInstance
- test object identityhasEntry
,hasKey
,hasValue
- test a map contains an entry, key or valuehasItem
,hasItems
- test a collection contains elementshasItemInArray
- test an array contains an elementcloseTo
- test floating point values are close to a given valuegreaterThan
,greaterThanOrEqualTo
,lessThan
,lessThanOrEqualTo
equalToIgnoringCase
- test string equality ignoring caseequalToIgnoringWhiteSpace
- test string equality ignoring differences in runs of whitespacecontainsString
,endsWith
,startsWith
- test string matching
To see all matchers, use API reference
728x90
반응형
'프로그래밍 노트 > TEST를 해보자' 카테고리의 다른 글
[Mockito] @Spy, @SpyMock 스터빙(stubbing)(thenReturn vs doReturn) (0) | 2020.12.14 |
---|---|
[Mockito] Mockito이용하여 테스트하기(@Mock, @Spy, @InjectMocks, @MockBean, @SpyBean) (1) | 2020.12.14 |
Mockito 어노테이션(@Mock, @InjectMocks) (0) | 2019.11.18 |
모키토 프레임워크(Mockito framework) (0) | 2019.11.13 |
Hmacrest 프레임워크 사용하기_2 (0) | 2019.11.13 |