JUnit과 Hamcrest

바퀴달린 개발자·2021년 11월 23일
0

TDD

목록 보기
2/3

Junit3

  • java 단위 테스트 프레임워크이며 TDD의 근간이 되는 프레임워크
  • 오픈소스 프로젝트로 개발되며 지금도 꾸준히 버전업을 하고 있다.

제공 기능

  1. 테스트 결과가 예상과 같은지 판별해주는 단정문(assertions)
  2. 여러 테스트에서 공용으로 사용할 수 있는 테스트 픽스처(test fixture)
  3. 테스트 작업을 수행할 수 있게 해주는 테스트 러너(test runner)

단정문(assertison)

  1. assertEqulas([message], expected, actual)
  2. assertTrue([message], expected) / assertFasle([message], expected)
  3. 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

특징

  1. Java5 애노테이션 지원
  2. test라는 글자는 method 이름을 시작해야한다는 제약 해소
    Test 메소드는 @Test를 붙잍다.
  3. 좀 더 유연한 픽스처
    @BeforeClass, @AfterClass, @Before, @After
  4. 예외 테스트
    @Test(expected=NumberFormatException.class)
  5. 시간 제한 테스트
    @Test(timeout=1000)
  6. 테스트 무시
    @Ignore("this method isn't working yet")
  7. 배열 지원
    assertArrayEqulas[message], expected, actual)
  8. @RunWith(클래스이름.class)
    Runner를 명시적으로 지정
  9. @SuitClasses(Class[])
    여러개의 테스트 클래스를 수행하기 위해 사용됨
  10. 파라미터를 이용한 테스트
    @RunWith(Paramterized.class)
    @Parameters

Hamcrest

  • Matcher 라이브러리로, 테스트 표현식을 작성할 때 좀 더 문맥적으로 자연스럽고, 우아한 문장을 만들 수 있또록 도와준다.
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

  1. anything
  2. describedAs
  3. is

Objects

  1. hasToString
  2. instanceOf, isCompatibleType
  3. notNullValue, nullValue
  4. sameInstance

Logical

  1. allOf
  2. anyOf
  3. not

Beans

  1. hasProperty

Collections

  1. array
  2. hasEntry, hasKey, hasValue
  3. hasItem, hasItems
  4. hasItemInArray

Text

  1. equalToIgnoringCase
  2. equalToIgnoringWhiteSpace
  3. containsString, endsWith, startsWith

참고

https://repo.yona.io/doortts/blog/issue/3

0개의 댓글