学习Junit5-断言:
Junit5 学习记录
- 一周掌握 Junit5的基础用法
assert断言:
Junit5 学习环境:java15+idea2022.2+maven3.8
首先需要在pom.xml引入两个依赖
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
</configuration>
</plugin>
-
命名规范: 用例编写路径:Project/src/Test/java下编写,并类名要以Test开头或者结尾,idea本身是对该类名没有限制的,但是使用maven命令运行的话,会去检索Test关键字,不用Test关键字命名则不会被扫描到,也就不执行,也可自定义关键字,需要再pom.xml中说明,如图:需要配置 maven-surefire-plugin
-
Junit 常用断言assert方法
测试用例使用:@Test注解表示一条用例
常用断言方法:assertEquals,用来对比期望值与实际值是否相同,assertTrue ,用来对表达式是否是true,assertNotNull,用来判断表达式是是都是Null,assert还有很多其他的断言方法,可以使用,不具体展开记录了
上面的测试用例,如果有一个表达式失败,则停止执行,后面的将不会执行到,因此引用了assertAll ,来解决上面问题
此方法,最后两条应该是失败的,看一下执行结果,能看出,倒数第二条失败后,又继续执行了倒数第一条
-
用例的执行顺序
用例在 执行前后可能会 有一些公共的方法需要执行,比如说加载全局变量,关闭I/O等操作,这里可以用注解:@BeforeAll @BeforeEach @AfterAll @AfterEach来完成
他们的执行顺序结合继承,总结如下:
@BeforeAll @AfterAll 和 @BeforeEach @AfterEach的区别,
他们的生命周期不同,前者,它在整个测试套件前后执行,后者是每一个测试用例的前后都执行
- 执行测试用例
可以点击idea 上面绿色三角形来执行测试类或者测试方法,也可以使用maven命令来执行:
在pom.xml同级目录下执行:mvn test 命令,可以执行该项目下所有的测试用例或者是pom.xml中配置的用例。
执行某个类或多个类:mvn test ‘-Dtest=包名.类名1,包名.类名2…’,
如果执行某个类中的某方法或多个方法:mvn test ‘-Dtest=包名.类名#方法名1+方法名2…’
还有正则匹配:mvn test “-Dtest=com.zqh.*Test”,来执行com.zqh包下面以Test结尾的类的用例`,
或者是在配置文件配置想要执行的包、类等
pom.xml里使用<include>
标签
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<!-- 如果这个配置了includes,用命令行就只运行这里的用例-->
<includes>
<!-- 自定义命名规则,包含zqh的可扫描为测试用例 -->
<include>com/zqh/*</include>
</includes>
</configuration>
</plugin>
- 不被执行的测试类
这里使用配置文件来实现不被执行的测试类,使用标签<exclude>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<includes></includes>
<!-- 不被执行的测试用例-->
<excludes>
<exclude>com/zqh/junit/*</exclude>
</excludes>
</configuration>
</plugin>
多断言:
- assertAll
上面学习的assertAll可以实现软断言,也就是,当一个测试用例执行失败时,不会导致程序结束,会继续执行后面的代码 - lambda表达式
上面的assertAll结合lambda表达式是用
lambda表达式的格式:(形式参数) ->(代码块)
3.把断言的内容放在list里
4.高级断言hamcrest
首先pom.xml要加入hamcrest如下:
有这些常用的断言,这些被称之为匹配器
要注意,这里上面的方法导包,一定是导的hamcrest下面的
-
Is:将一个对象作为参数来检验相等性的,Is(Matcher<T>), 搭配其他匹配方法使用,来达到增强表现能力
-
equalTo:一般情况下 is和equalTo不分家,is(equalTo(object<T>)),也是来表示 是否相等的
-
not:这个是验证不相等性,用法与前面equalTo类似 is(not(equalTo(object<T>))),来表示是否不相等,与效果 not(Object<T>)一样
-
hansItem:判断list里是否包含某个值,是否是String型或者其他型
-
allOf: 先上用法:allOf(条件1,条件2,条件3),allOf表示,这里面的所有条件都需要匹配才是测试通过,其中一个不满足,就会单元失败
-
anyOf:使用与allOf一样,表示,只要一个条件匹配成功,则断言成功
-
both: both里也是添加匹配器的,与and搭配使用,代表 2个条件都匹配,否则断言失败
-
either: either 与 or 搭配使用,表示:只匹配其中之一则表示断言成功