自动化测试之—Hamcrest匹配器
本来计划要写一点Espresso方面知识的,但是想到Espresso中好多控件或者断言都是使用Hamcrest匹配器,另一方面则是Hamcrest匹配器相比JUnit的Assert则显得更加优雅、轻便,更容易阅读。
简述
Hamcrest是用于编写匹配器对象的框架,允许以声明方式定义“匹配”规则。有许多情况下匹配器是不可估量的,例如UI验证或数据过滤,但是在编写灵活测试的领域中,匹配器反而是最常用的。
Hamcrest还是相对比较简单的,API也相对比较少,就从一个小例子说起吧。
假如要你要测试一个集合中是否包含三个元素中的一个,如果包含则断言真,否则为假。把集合的初始化放在@Before
中,则用JUnit的Assert断言写法如下:
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertTrue;
/**
* Created by star on 2017/8/3.
*/
@RunWith(JUnit4.class)
public class HamcrestTest {
private List<String> hamcrestTestList;
@Before
public void setUp() {
hamcrestTestList = new ArrayList<>();
hamcrestTestList.add("first element");
hamcrestTestList.add("second element");
hamcrestTestList.add("third element");
}
@Test
public void assertWithJunitTest() {
assertTrue(hamcrestTestList.contains("first element")
|| hamcrestTestList.contains("second element")
|| hamcrestTestList.contains("third element"));
}
}
assertWithJunitTest方法本身并难以理解,但是你第一眼看到它很可能不太明白它是做什么的,而且代码也不简练,而Hamcrest则正是为了简化断言,可以构建测试表达式的匹配器库。Hamcrest的书写方法如下:
import static org.hamcrest.CoreMatchers.anyOf;
import static