三丰 soft张三丰编程
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,通常来讲,要根据实际状况去断定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中能够指一个窗口或一个菜单等。总的来讲,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程当中要进行的最低级别的测试活动,软件的独立单元将在与程序的其余部分相隔离的状况下进行测试。
在一种传统的结构化编程语言中,好比C,要进行测试的单元通常是函数或子过程。在像C++这样的面向对象的语言中, 要进行测试的基本单元是类。对Ada语言来讲,开发人员能够选择是在独立的过程和函数,仍是在Ada包的级别上进行单元测试。单元测试的原则一样被扩展到第四代语言(4GL)的开发中,在这里基本单元被典型地划分为一个菜单或显示界面。
常常与单元测试联系起来的另一些开发活动包括代码走读(Code review),静态分析(Static analysis)和动态分析(Dynamic analysis)。静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不须要对代码进行编译和执行。动态分析就是经过观察软件运行时的动做,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。数组
Hamcrest是用于Java的单元测试的框架,它使用matcher匹配器来进行断言。在Spring-boot-starter中集成了Hamcrest,无需而外引入。markdown
1.is框架
String str1 = "text"; String str2 = " text "; assertThat(str1, is(equalToIgnoringWhiteSpace(str2)));
String str1 = "text"; String str2 = "text"; assertThat(str1, is(str2));
2.not
和is使用方式同样,只是含义相反。编程语言
String str1 = "text"; String str2 = " text "; assertThat(str1, not(equalToIgnoringWhiteSpace(str2)));
String str1 = "text"; String str2 = "text"; assertThat(str1, not(str2));
3.containsString
是否包含子串ide
String str1 = "text123"; String str2 = "text"; assertThat(str1, containsString(str2));
4.觉得某个字段开头/结尾函数
String str1 = "text123"; assertThat(str1, startsWith("text"));// 以某个字符开头 assertThat(str1, endsWith("text"));// 以某个字符开头
5.判断两个对象是否为同一个实体单元测试
Cat cat=new Cat(); assertThat(cat, sameInstance(cat));
6.相似OR的效果测试
String str = "calligraphy"; String start = "call"; String end = "foo"; assertThat(str, anyOf(startsWith(start), containsString(end)));
7.相似AND的效果idea
String str = "calligraphy"; String start = "call"; String end = "phy"; assertThat(str, allOf(startsWith(start), endsWith(end)));
1.匹配空串
String str = ""; assertThat(str, isEmptyString()); // 空字符串 assertThat(str, isEmptyOrNullString()); // 空字符串或者null
2.匹配字符串相等
String str1 = "text"; String str2 = " text "; assertThat(str1, equalToIgnoringWhiteSpace(str2)); // 忽略左右空白 assertThat(a, equalToIgnoringCase(b)); //忽略大小写
1.检查某个元素是否在集合中
List<String> collection = Lists.newArrayList("ab","cd","ef"); assertThat(collection, hasItem("cd")); assertThat(collection, not(hasItem("zz"))); assertThat(collection, hasItems("cd", "ab")); // 检查多个元素是否在集合中
2.检查全部元素
List<String> collection = Lists.newArrayList("ab","cd","ef"); assertThat(collection, hasItems("ab","cd","ef")); assertThat(collection, hasItems("cd", "ab","ef")); // 错误 assertThat(collection, hasItems("ab","cd")); // 错误 assertThat(collection, containsInAnyOrder("cd", "ab","ef")); //正确,不区分顺序
3.为空检查
List<String> collection = Lists.newArrayList("ab","cd","ef"); assertThat(collection, empty()); // false, 用于检查集合类型
String[] array = new String[] { "ab" }; assertThat(array, emptyArray()); // false
Map<String, String> maps = Maps.newHashMap(); assertThat(maps, equalTo(Collections.EMPTY_MAP));
Iterable<String> collection = Lists.newArrayList(); assertThat(collection, emptyIterable());
4.检查数目
List<String> list = Lists.newArrayList("ab", "cd", "ef"); assertThat(list, hasSize(3));
Iterable<String> list = Lists.newArrayList("ab", "cd", "ef"); assertThat(list, iterableWithSize(3));
5.检查每项的条件
List<String> list = Lists.newArrayList("ab", "cd", "ef"); assertThat(list, everyItem(equalTo("ab")));
定义一个City的bean
@Data @AllArgsConstructor public class City { String name; String state; }
1.测试是否存在某个属性
City city = new City("shenzhen", "CA"); assertThat(city, hasProperty("state")); assertThat(city, hasProperty("state", equalTo("CA"))); // 判断是否存在某个属性,而且是否存在某个特性值
2.判断两个对象property值是否同样
City city = new City("San Francisco", "CA"); City city2 = new City("San Francisco", "CA"); assertThat(city, samePropertyValuesAs(city2));
JUnit 5 对 Java 运行环境的最低要求是 Java 8。
IntelliJ IDEA支持自2016.2以后支持junit5。
推荐使用IDEA 2017.3或以后的版本。
各idea版本和支持的junit5版本对照:
junit5经常使用注解:
JUnit 5 提供了三种不一样的方式来执行测试用例,分别是经过 Gradle 插件、Maven 插件和命令行来运行。