[Dependency 추가]
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
[사용 어노테이션]
- @RunWith(SpringJUnit4ClassRunner.class)
- JUnit 프레임워크의 실행 방법을 확장 시 사용하는 어노테이션
- JUnit이 테스트를 진행하는 중에 사용할 애플리케이션 컨텍스트를 생성하고 관리하는 작업을 진행.
- @ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
- 지정된 경로의 root-context.xml 파일을 로딩해서 필요한 클래스를 스프링 빈으로 등록.
- @Test
- JUnit에서 아래의 메소드가 단위 테스트 대상임을 나타내는 어노테이션.
[기본 구조]
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j2
public class SampleTests {
@Setter(onMethod_ = @Autowired)
private Restaurant restaurant;
@Test
public void testExist() {
assertNotNull(restaurant);
log.info(restaurant);
}
}
[assert]
- 기본적인 테스트 메소드
- 더 많은 메소드 참고: https://junit.sourceforge.net/javadoc/org/junit/Assert.html
- assertTrue(a): 조건 a가 참인지 확인
- assertNotNull(a): 객체 a가 null이 아님을 확인
- assertArrayEquals(a,b): 배열 a와 b가 일치함을 확인
- assertEquals(a,b): 객체 a와 b가 같은 값을 가지는지 확인
- assertEquals(a,b,c): 객체 a와 b가 일치함을 확인(a:예상값, b:결과값, c:오차범위)
- assertSame(a,b): 객체 a와 b가 같은 객체임을 확인
[AssertThat]
allOf
- 내부에 선언된 모든 매쳐가 정상일 경우 통과한다.
ex ) assertThat("myValue", allOf(startsWith("my"), containsString("Val")))
anyOf
- 내부에 선언된 매쳐중 하나 이상 통과할 경우 통과한다.
ex ) assertThat("myValue", anyOf(startsWith("foo"), containsString("Val")))
bothboth
- A and B 형식으로 matcher를 사용할 수 있게 해 준다.
- A, B 매쳐 둘다 통과할 경우 테스트가 성공한다.
ex ) assertThat("fab", both(containsString("a")).and(containsString("b")))
eithereither
- A or B 형식으로 matcher를 사용할 수 있게 해 준다.
- A, B 매쳐 둘중 하나가 성공할 경우 테스트가 성공한다.
ex ) assertThat("fan", either(containsString("a")).or(containsString("b")))
describedAs
- 매쳐내부의 메시지를 변경할 수 있다.
ex ) assertThat (new BigDecimal(“32123”), describedAs("a big decimal equal to %0", equalTo(myBigDecimal), myBigDecimal.toPlainString()));
everyItem
- 배열이나 리스트를 순회하며 매쳐가 실행된다.
ex ) assertThat(Arrays.asList("bar", "baz"), everyItem(startsWith("ba”)));
is
- is는 두가지 용도로 사용할 수 있다.
- A is B와 같이 비교값이 서로 같은지 여부를 확인할 경우
- is가 있음으로써 쉽게 읽혀지는 테스트 코드로 변경하여 준다.
ex ) assertThat("Simple Text", is("Simple Text"));
assertThat("Simple Text", is(equalTo("Simple Text"))); // 위와 동일
isA
- 비교되는 값이 특정 클래스일 경우 테스트가 통과된다.
- is(instanceOf(SomeClass.class))와 동일하다.
ex ) assertThat(cheese, isA(Cheddar.class))
anything
hasItem
- 배열에서 매쳐가 통과하는 값이 하나 이상이 있는지 여부를 검사한다.
ex ) assertThat(Arrays.asList("foo", "bar"), hasItem("bar"))
hasItems
- 배열에서 매쳐리스트에 선언된 값들 모두가 하나 이상 있는지 여부를 검사한다.
ex ) assertThat(Arrays.asList("foo", "bar", "baz"), hasItems("baz", "foo"))
equalTo
- 두 값이 같은지 여부를 체크한다. is와 동일하게 사용할 수 있다.
ex ) assertThat("foo", equalTo("foo"));
any
- 비교값이 매쳐의 타입과 동일한지 여부를 체크한다.
- instanceOf와는 다르게 매쳐의 값은 앞서 비교값의 타입의 자식만 비교할 수 있다.
ex ) assertThat(new Canoe(), instanceOf(Canoe.class));
instanceOf
- 비교값이 매쳐의 타입과 동일한지 여부를 체크한다.
- any와는 다르게 매쳐의 값은 비교값과 연관없는 경우에도 사용할 수 있다.
ex ) assertThat(new Canoe(), instanceOf(Paddlable.class));
not
-
is와 동일하게 두가지 경우로 사용할 수 있다.
-
내부에 매쳐를 선언할 경우 내부 매쳐의결과를 뒤집는다.
ex ) assertThat(cheese, is(not(equalTo(smelly))))
-
not뒤에 값이 나올 경우, 같지 않을 경우 테스트가 통과한다.
ex ) assertThat("Test", not("tEST"));
nullValue
- 비교값이 null일경우 테스트가 통과한다.
ex ) assertThat(cheese, is(nullValue())
notNullValue
- 비교값이 null이 아닐경우 테스트가 통과한다.
ex ) assertThat(cheese, is(notNullValue()))
sameInstance
- 비교 매쳐의 값과 같은 인스턴스일 경우 테스트가 통과한다.
- theInstance 와 동일
ex ) assertThat("Test", not(sameInstance("not Same Instance")));
theInstance
- 비교매쳐의 값과 같은 인스턴스일 경우 테스트가 통과한다.
- sameInstance 와 동일
ex ) assertThat("Test", not(sameInstance("not Same Instance")));
containsString
- 특정 문자열이 있는지를 검사한다.
ex ) assertThat("myStringOfNote", containsString("ring"));
startsWith
- 특정 문자열로 시작하는지를 검사한다.
ex ) assertThat("myStringOfNote", startsWith("my"))
endsWith
- 특정 문자열로 종료되는지를 검사한다.
ex ) assertThat("myStringOfNote", endsWith("Note"))