Hamcrest : 비교표현확장
Hamcrest 라이브러리는 기본적으로 assertEquals 대신에 assertThat이라는 구분사용을 권장한다.
공학적인 느낌을 주는 딱딱한 assertEquals 보다는 assertThat이 좀 더 문맥적인 흐르을 만들어준다고 여기기 때문입니다. ( 영어라서 이해를 못하겠습니다. ㅜ.ㅜ)
JUnit 4.7, 4.8 기본 탑재되어 있는 Hamcrest 버전은 1.1 core 입니다.
Hamcrest(햄크레스트)는 jMock이라는 Mock 라이브러리 저자들이 참여해 만들고 있는Matcher 라이브러리입니다.
테스트 표현식을 작성할 때 좀 더 문맥적으로 자연스럽고, 우아한 문장을 만들 수 있게 도와줍니다.
개발자만이 읽을 수 있는 프로그램밍 언어라라는 느낌보다 좀 더 문장체에 가까운 느낌으로 넓은 범주의 사람들이 함께 이해할 수 있는 형태로 만들어줍니다.
현재 Hamcrest는 Java 이외에도 C++, Objective-C, Phthon 그리고 PHP 버전으로도 포팅되어 있습니다.
Hamcrest(햄크레스트)는 jMock이라는 Mock 라이브러리 저자들이 참여해 만들고 있는Matcher 라이브러리입니다.
테스트 표현식을 작성할 때 좀 더 문맥적으로 자연스럽고, 우아한 문장을 만들 수 있게 도와줍니다.
개발자만이 읽을 수 있는 프로그램밍 언어라라는 느낌보다 좀 더 문장체에 가까운 느낌으로 넓은 범주의 사람들이 함께 이해할 수 있는 형태로 만들어줍니다.
현재 Hamcrest는 Java 이외에도 C++, Objective-C, Phthon 그리고 PHP 버전으로도 포팅되어 있습니다.
Matcher 라이브러리: 필터나 검색등을 위해 값을 비교할 때 좀 더 편리하게 시용할 수 있게 도와주는 라이브러리입니다.
Hamcrest 라이브러리는 기본적으로 assertEquals 대신에 assertThat이라는 구분사용을 권장한다.
공학적인 느낌을 주는 딱딱한 assertEquals 보다는 assertThat이 좀 더 문맥적인 흐르을 만들어준다고 여기기 때문입니다. ( 영어라서 이해를 못하겠습니다. ㅜ.ㅜ)
asertEquals("YoungJim", customer.getName() ); assertThat( customer.getName(), is("YoungJim") ); // 적용 전 assertEquals(100, account.getBalance()); // 적용 후 aseertThat(account.getBalance(), is(equalTo(10000))); // 적용 전 assertNotNull(resorce.newConnection()); // 적용 후 assertThat(resource.newConection(), is(notNullValue()); // 적용 전 assertTrue(account.getBalance() > 0); // 적용 후 assertThat(account.getBalance(), isGreaterThan(0)); // 적용 전 assertTrue(user.getloginName().indexOf("Guest") > -1); // 적용 후 asertThat(user.getLoginName(), containsString("Guest"));
import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import org.junit.Test; public class HamcrestTest{ @Test public void testArray() throws Exception { assertThat("Start Date 비교", "2010/02/03", is("2010/02/04")); } }
패키지 | 설명 |
---|---|
org.hamcrest.core | 오브젝트나 값들에 대한 기본적인 Matcher들 |
org.hamcrest.beans | Java 빈(Bean)과 그 값 비교에 사용되는 Matcher들 |
org.hamcrest.coolection | 배열과 컬렉션 Matcher들 |
org.hamcrest.number | 수 비교를 하기 위한 Matcher들 |
org.hamcrest.object | 오브젝트와 클래스들 비교하는 Matcher들 |
org.hamcrest.test | 문자열 비교 |
org.hamcrest.xml | XML 문서 비교 |
- 코어(Core)
메소드 설명 클래스 명 anything 어떤 오브젝트가 사용되든 일치한다고 판별한다. IsAnything describedAs 테스트 실패 시에 보여줄 추가적인 메시지를 만들어주는 메시지 테코레이터 DescribedAs equalTo 두 오브텍트가 동일한지 판별한다. IsEqual is 내부적으로 equalTo와 동일하다.
가독성 증진용.
아래 세문장은 의미가 동일하다.
[code java]assertThat(entity, equalTo(expectedEntity));
assertThat(entity, is(equalTo(expectedEntity)));
assertThat(entity, is(expectedEntity));
[/code]Is - 오브젝트(Object)
메소드 설명 클래스 명 hasToString toString 메소드 값과 일치 여부를 판별한다. HasToString instanceOf
typeCompatibleWith동일 인스턴스인지 타입비교(instance of).
동일하거나 상위 클래스, 인터페이스인지 판별IsInstanceOf
IsCompatibleTypenotNullValue
nullValueNull인지, 아닌지 판별 IsNull sameInstance Object가 완전히 동일한지 비교.
equals 비교가 아닌 ==(주소비교)로 비교하는 것과 동일isSame - 논리(Logical)
메소드 설명 클래스 명 allOf 비교하는 두 오브젝트가 각각 여러 개의 다른 오브젝트를 포함하고 있을 경우에, 이를테면 collection 같은 오브젝트일 경우 서로 동일한지 판별한다. Java의 숏서킷(&& 비교)과 마찬가지로 한 부분이라도 다른 부분이 나오면 그 순간 false를 돌려준다. AllOf anyOf allOf와 비슷하나 anyOf는 하나라도 일치하는 것이 나오면 true로 판단한다.
Java의 숏서킷(||)과 마찬가지로 한 번이라도 일치하면 true를 돌려준다.AnyOf not 서로 같지 않아야 한다. IsNot - 빈즈(Beans)
메소드 설명 클래스 명 hasProperty Java 빈즈 프로퍼티 테스트 HasProperty - 컬렉션(Collection)
메소드 설명 클래스 명 array 두 배열 내의 요소가 모두 일치하는지 판별 IsArray hasEntry, hasKey, hasValue 맴(Map)요소에 대한 포함 여부 판단 isMapContaining hasItem, hasItems 특정 요소들을 포함하고 있는지 여부 판단 IsCollectionContaining hasItemInArray 배열 내에 찾는 대상이 들어 있는지 여부를 판별 IsArrayContaining - 숫자(Number)
메소드 설명 클래스 명 closeTo 부동소수점(floating point) 값에 대한 근사값 내 일치 여부, 값(value)과 오차(delta)를 인자로 갖는다. IsCloseTo greaterThan
greaterThanOrEqualTo값 비교. >, >= OrderingComparison lessThan
lessThanOrEqualTo값 비교. <, <= OrderingComparison - 텍스트(Text)
메소드 설명 클래스 명 containsString 문자열이 포함되어 있는지 여부 StringContains startsWith 특정 문자열로 시작 StringStartsWith endsWith 특정 문자열로 종료 StringEndsWith equalToIgnoringCase 대소문자 구분하지 않고 문자비교 IsEqualIgnoringCase equalToIgnoringWithSpace 문자열 사이의 공백 여부를 구분하지 않고 비교 IsEqualIgnoringWhiteSpace
반응형
'lang > tdd' 카테고리의 다른 글
OOP 객체 액션 (0) | 2010.12.14 |
---|---|
TDD 우분투에서 phpunit 설치 (0) | 2010.12.08 |
TDD jUnit4 특징 (0) | 2010.12.06 |
TDD 실습 - 은행계좌(Account) 클래스 만들기 (0) | 2010.12.03 |
TDD 개발 진행방식 (0) | 2010.12.02 |