Hamcrest 총괄
JUnit 프레임 워 크 는 자주 사용 하 는 단언 들 을 assert 방법 으로 봉 했다.이 assert 방법 들 은 단원 테스트 의 작성 을 간소화 하 는 데 도움 을 줄 수 있다.이렇게 되면 Junit 는 이러한 단언 에 따라 Assertion Failed Error 오 류 를 던 졌 는 지 여부 에 따라 테스트 용례 의 실행 결 과 를 판단 할 수 있다.
Hamcrest
Junit 를 사용 한 경험 이 있 을 것 입 니 다.실제 개발 에서 eqaul,null,true 와 같은 기본 적 인 단언 들 은 가 독성 이 좋 지 않 습 니 다.그리고 우 리 는 대상,집합,맵 등 데이터 구 조 를 비교 해 야 할 때 가 많다.이렇게 하면 우 리 는 큰 필드 를 가 져 와 서 단언 을 하든지 한다.아니면 아예 표현 식 을 만들어 결 과 를 단언 하 세 요.JUnit 4.4 는 Hamcrest 프레임 워 크 를 도 입 했 고 Hamcest 는 일치 문자 Matcher 를 제공 했다.이런 일치 부 호 는 자연 언어 에 더욱 가 깝 고 가 독성 이 높 으 며 유연 하 다.Hamcrest 는'매 칭 기'라 고 불 리 는 방법 을 대량으로 제공 했다.그 중에서 모든 매 칭 기 는 특정한 비교 작업 을 수행 하 는 데 사용 하도록 설계 되 었 다.Hamcrest 는 사용자 정의 일치 기 를 만 들 수 있 도록 확장 성 이 좋 습 니 다.무엇 보다 JUnit 에 도 Hamcrest 의 핵심 이 포 함 돼 Hamcrest 를 직접 사용 할 수 있 는 네 이 티 브 지원 을 제공 했다.당연히 기능 이 완 비 된 Hamcrest 를 사용 해 야 하 며,그것 에 대한 의존 도 를 도입 해 야 한다.
예 를 들 어 전 자 는 Junit 의 단언 을 사용 하고 후 자 는 Hamcrest 의 단언 을 사용한다.
@Test
public void test_with_junit_assert() {
int expected = 51;
int actual = 51;
assertEquals("failure - They are not same!", expected, actual);
}
@Test
public void test_with_hamcrest_assertThat() {
int expected = 51;
int actual = 51;
assertThat("failure - They are not same!", actual, equalTo(expected));
}
:
1. 。 expected actual 。
2. Hamcrest 。 。
,Junit , , 。
Hamcrest 。
Hamcrest , http://hamcrest.org/
Java
Python
Ruby
Objective-C
PHP
Erlang
Swift
Hamcrest
Hamcrest api 。
:
anything - ,
describedAs -
is - - “Sugar”
:
allOf - , Java &&
anyOf - , Java ||
not - ,
:
equalTo - Object.equals
hasToString - Object.toString
instanceOf, isCompatibleType -
notNullValue, nullValue - null
sameInstance -
Beans:
hasProperty - JavaBeans
:
array - test an array’s elements against an array of matchers
hasEntry, hasKey, hasValue - Map ,
hasItem, hasItems -
hasItemInArray -
:
closeTo -
greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo -
:
equalToIgnoringCase -
equalToIgnoringWhiteSpace -
containsString, endsWith, startsWith -
API 。 , 、 、 。
, 。 Hamcrest api , 。
hasProperty
。
public class MyPerson {
private Address address;
private String name;
private String fullName;
// ...
}
Address :
public class Address {
private String companyAddress;
private String personalAddress;
// ...
}
person , companyAddress 。
@Test
public void test_with_complex_property() {
MyPerson p = new MyPerson();
Address address = new Address();
address.setCompanyAddress("");
p.setAddress(address);
assertThat("failure has no address property !", p, hasProperty("address"));
// would failed
// assertThat("failure has no address.companyAddress !", p, hasProperty("address.companyAddress"));
}
。 hasProperty , 。 rest-assured API 。
:
assertThat("failure has no address property !", p, hasProperty("address", hasProperty("companyAddress")));
, 。
, :
@Test
public void test_with_list_generics() {
List persons = new ArrayList();
MyPerson p = new MyPerson();
p.setName("KaKa");
persons.add(p);
MyPerson p2 = new MyPerson();
p2.setName("Hust");
persons.add(p2);
// compile error
// assertThat("failure has no address property !", persons, everyItem(hasProperty("address")));
assertThat("failure has no address property !", (List
。 , ! , 。
, person name fullName , fullName startwith name 。
@Test
public void test_with_list_compare_with_self() {
//
List persons = new ArrayList();
MyPerson p = new MyPerson();
p.setName("KaKa");
p.setFullName("KaKa Zhang");
persons.add(p);
MyPerson p2 = new MyPerson();
p2.setName("Hust");
p.setFullName("Hust Zhang");
persons.add(p2);
// , person startsWith
assertThat((List
, startwWith 。
@Test
public void test_with_list_compare_with_self() {
//
List persons = new ArrayList();
MyPerson p = new MyPerson();
p.setName("KaKa");
p.setFullName("KaKa Zhang");
persons.add(p);
MyPerson p2 = new MyPerson();
p2.setName("Hust");
p2.setFullName("Hust Zhang");
persons.add(p2);
//
for (MyPerson person : persons) {
assertThat(person.getFullName().startsWith(""), is(true));
}
}
。 , 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.