?1.注解
JUnit提供了非常强大的注解功能,通过@Test
注解修饰到方法上,该方法就变为了一个测试方法,执行当前类时,会自动的执行该类下所有带@Test
注解的用例。
在使用这些JUnit提供的注解时,需要现在pom.xml文件中进行配置:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
@Test
示例:
除了@Test注解外,还有以下常用注解:
@BeforeEach:当前的方法需要在每个用例执行之前都执行一次
@BeforeAll:当前的方法需要在当前类下所有用例执行之前执行一次,且被该注解修饰的方法必须为静态方法
@AfterEach:当前的方法需要在每个用例执行之后都执行一次
@AfterAll:当前的方法需要在当前类下所有用例执行之后执行一次,且被该注解修饰的方法必须为静态方法
?2.断言
检查测试方法的期望结果值和真实返回值,通过Assertions类实现。
- 断言匹配/不匹配:assertEquals()、assertNotEquals()
- 断言结果为真/为假:assertTrue()、assertFalse()
- 断言结果为空/非空:assertNull()、assertNotNull()
@Test
void a() {
Assertions.assertTrue(1==1);
}
?3.用例的执行顺序
如下图所示,测试用例的执行并不会按照我们编写代码的顺序来执行
如果在实际测试中,我们需要完成连贯的多个步骤的测试,是需要规定测试用例执行的顺序的,可以通过@order
注解来实现排序:
- 先使用注解说明当前类下所有的用例需要使用
@Order
注解来进行排序(注意:该注解必须要用在类上) - 然后通过
@Order
来指定用例的具体顺序
?4.参数化
参数化就是尽可能的通过一个用例,多组参数来模拟用户的行为
在使用参数化注解之前需要先用@ParameterizedTest
声明该方法为参数化方法,然后再通过注解提供数据来源。
单参数:@ValueSource
(数据类型方法={参数1,参数2…})
多参数:
1.从注解中手动编写数据源
@CsvSource
({“数据组合1”,“数据组合2”…}),每个双引号是一组参数(测试用例)
2.从第三方csv文件读取数据源如果测试用例较多时,在注解处手动编写数据源就有些不方便,我们这时就可以借助第三方csv文件来读取数据源
动态参数:
// 通过动态方法来提供数据源
@ParameterizedTest
@MethodSource("methodParams")
void dynamicParamsTest(String name,int age) {
System.out.println("name:"+name+",age:"+age);
}
static Stream<Arguments> methodParams() throws InterruptedException {
// 构造动态参数
String[] arr=new String[4];
for (int i=0;i< arr.length;i++) {
Thread.sleep(500);
arr[i]=System.currentTimeMillis()+"";
}
return Stream.of(
Arguments.arguments(arr[0],20),
Arguments.arguments(arr[1],19),
Arguments.arguments(arr[2],18),
Arguments.arguments(arr[3],17)
);
}
注意:当我们不指定数据源方法名时,会自动的找跟用例方法名同名的静态方法
?5.测试套件
当我们一个类中有多个测试用例时,我们不可能挨个去运行,那样将会很耗费时间,这时我们就需要测试套件来指定类或者指定包名来运行类下或者包下的所有测试用例。
如果要使用测试套件,首先我们需要先创建一个类,通过@Suite注解标识该类为测试套件类(而不是测试类)
然后指定类或者包来运行其下的所有测试用例
指定类来运行用例:
指定包名来运行包下所有的用例:如果使用包名来指定运行的范围,那么该包下的测试类的命名需要以Test/Tests
结尾(T必须大写)
到此这篇关于Java单元测试工具之JUnit的使用的文章就介绍到这了,更多相关JUnit使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!