Ví dụ JUnit với Matchers và assertThat.
Thông thường ta chỉ kiểm tra / expect kết quả của một unit bằng một giá trị nào đó. Với những trường hợp kết quả không cố định mà thường theo một định dạng nào đó thì ta sẽ cần phải sử dụng Matchers và assertThat.
(Ở bài test exception với JUnit mình có sử dụng assertThat và Matchers để kiểm tra loại exception nào được ném ra và message có bao gồm thông tin gì).
assertThat và Matchers
assertThat là một cơ chế mới của assertion, cú pháp của assertThat như sau:
assertThat([value], [matcher statement]);
- Core
anythingdescribedAsis
- Logical
allOfanyOfnot
- Object
equalTohasToStringinstanceOf,isCompatibleTypenotNullValue,nullValuesameInstance
- Beans
hasProperty
- Collections
arrayhasEntry,hasKey,hasValuehasItem,hasItemshasItemInArray
- Number
closeTogreaterThan,greaterThanOrEqualTo,lessThan,lessThanOrEqualTo
- Text
equalToIgnoringCaseequalToIgnoringWhiteSpacecontainsString,endsWith,startsWith
- …
Để sử dụng các cú pháp của matchers ta khai báo thư viện hamcrest-all:
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
(khi khai báo thư viện junit nó chỉ include thư viện hamcrest-core, không có các matcher cho bean, collection…)
Ví dụ:
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
import org.hamcrest.Matchers;
import org.junit.Test;
public class DemoAssertThat {
@Test
public void demoAssertThat1() {
String str = "stackjava.com";
int number = 10;
Integer [] arr = new Integer[] {1,2,3};
assertThat(number, Matchers.greaterThan(9));
assertThat(number, Matchers.lessThanOrEqualTo(11));
assertThat(str, containsString("stackjava"));
assertThat(arr, Matchers.arrayWithSize(3));
}
}
Ví dụ JUnit với Matchers và assertThat stackjava.com
Okay, Done!
References:
https://github.com/junit-team/junit4/wiki/Matchers-and-assertThat
https://code.google.com/archive/p/hamcrest/wikis/Tutorial.wiki
