JUnit과 Hamcrest
Junit3
- java 단위 테스트 프레임워크이며 TDD의 근간이 되는 프레임워크
- 오픈소스 프로젝트로 개발되며 지금도 꾸준히 버전업을 하고 있다.
제공 기능
- 테스트 결과가 예상과 같은지 판별해주는 단정문(assertions)
- 여러 테스트에서 공용으로 사용할 수 있는 테스트 픽스처(test fixture)
- 테스트 작업을 수행할 수 있게 해주는 테스트 러너(test runner)
단정문(assertison)
- assertEqulas([message], expected, actual)
- assertTrue([message], expected) / assertFasle([message], expected)
- assertNull([message], expected) / assertNutNull([message], expected)
assertEquals
구현
static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null) return;
if (expected != null && expected.equals(actual)) return;
failNotEquals(message, expected, actual);
}
기타 assertEquals
오차 보정
assertEquals ([message], double expected, double actual, double delta)
- delta 라는 오차 보정값을 이용해 적절한 오차 범위 내의 값은 동일한 값으로 판단할 수 있게 해준다.
객체 비교
assertSame([message], expected, actual)
assertNotSame([message], expected, actual)
static public void assertSame(String message, Object expected, Object actual) {
if (expected == actual) return;
failNotSame(message, expected, actual);
}
- 두 객체가 정말 동일한 객체인지 주소값으로 비교
- 싱글톤으로 만들어진 객체를 비교할 때 쓰인다.
assertTrue / assertFalse
assertNull / assertNotNull
Junit4
특징
- Java5 애노테이션 지원
- test라는 글자는 method 이름을 시작해야한다는 제약 해소
Test 메소드는 @Test를 붙잍다.
- 좀 더 유연한 픽스처
@BeforeClass, @AfterClass, @Before, @After
- 예외 테스트
@Test(expected=NumberFormatException.class)
- 시간 제한 테스트
@Test(timeout=1000)
- 테스트 무시
@Ignore("this method isn't working yet")
- 배열 지원
assertArrayEqulas[message], expected, actual)
- @RunWith(클래스이름.class)
Runner를 명시적으로 지정
- @SuitClasses(Class[])
여러개의 테스트 클래스를 수행하기 위해 사용됨
- 파라미터를 이용한 테스트
@RunWith(Paramterized.class)
@Parameters
Hamcrest
- Matcher 라이브러리로, 테스트 표현식을 작성할 때 좀 더 문맥적으로 자연스럽고, 우아한 문장을 만들 수 있또록 도와준다.
assertThat(customer.getName(), is("YK"));
- 테스트 결과가 예상과 같은지 판별해주는 단정문(assertions)
- 여러 테스트에서 공용으로 사용할 수 있는 테스트 픽스처(test fixture)
- 테스트 작업을 수행할 수 있게 해주는 테스트 러너(test runner)
- assertEqulas([message], expected, actual)
- assertTrue([message], expected) / assertFasle([message], expected)
- assertNull([message], expected) / assertNutNull([message], expected)
static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null) return;
if (expected != null && expected.equals(actual)) return;
failNotEquals(message, expected, actual);
}
assertEquals ([message], double expected, double actual, double delta)
assertSame([message], expected, actual)
assertNotSame([message], expected, actual)
static public void assertSame(String message, Object expected, Object actual) {
if (expected == actual) return;
failNotSame(message, expected, actual);
}
특징
- Java5 애노테이션 지원
- test라는 글자는 method 이름을 시작해야한다는 제약 해소
Test 메소드는 @Test를 붙잍다.- 좀 더 유연한 픽스처
@BeforeClass, @AfterClass, @Before, @After- 예외 테스트
@Test(expected=NumberFormatException.class)- 시간 제한 테스트
@Test(timeout=1000)- 테스트 무시
@Ignore("this method isn't working yet")- 배열 지원
assertArrayEqulas[message], expected, actual)- @RunWith(클래스이름.class)
Runner를 명시적으로 지정- @SuitClasses(Class[])
여러개의 테스트 클래스를 수행하기 위해 사용됨- 파라미터를 이용한 테스트
@RunWith(Paramterized.class)
@Parameters
Hamcrest
- Matcher 라이브러리로, 테스트 표현식을 작성할 때 좀 더 문맥적으로 자연스럽고, 우아한 문장을 만들 수 있또록 도와준다.
assertThat(customer.getName(), is("YK"));
assertThat(customer.getName(), is("YK"));
assertEquals 보다는 assertThat 구문 사용을 권장한다.
사용
// import static 꼭 필요해요~
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
assertThat(테스트 대상, Matcher 구문)
assertThat("메시지", 테스트대상, Matcher 구문)
Matchers
Core
- anything
- describedAs
- is
Objects
- hasToString
- instanceOf, isCompatibleType
- notNullValue, nullValue
- sameInstance
Logical
- allOf
- anyOf
- not
Beans
- hasProperty
Collections
- array
- hasEntry, hasKey, hasValue
- hasItem, hasItems
- hasItemInArray
Text
- equalToIgnoringCase
- equalToIgnoringWhiteSpace
- containsString, endsWith, startsWith
참고
https://repo.yona.io/doortts/blog/issue/3
Author And Source
이 문제에 관하여(JUnit과 Hamcrest), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyj5419/JUnit과-Hamcrest저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)