1. 常用的注解
将junit的索引添加到pom文件:
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.1</version></dependency><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.1</version></dependency><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite</artifactId><version>1.9.1</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite --><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite</artifactId><version>1.9.1</version></dependency><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.9.1</version><scope>test</scope></dependency>
文件讲解:
1.1. @Test
使用该注解表示当前方法是一个测试用例;
使用@Test注解的代码如下所示:
public class JunitTest {@Test void Test01() {System.out.println("-------这是第一个测试用例---------");}@Testvoid Test02() {System.out.println("-------这是第二个测试用例---------");}
}
运行测试用例之后的结果如下:
1.2. @BeforeAll,@AfterAll
public class JunitTest {@Testvoid Test01() {System.out.println("-------这是第一个测试用例---------");}@Testvoid Test02() {System.out.println("-------这是第二个测试用例---------");}@BeforeAllstatic void Start(){System.out.println("------------开始测试------------");}@AfterAllstatic void End(){System.out.println("------------结束测试------------");}
}
测试用例结果如下所示:
beforeAll在Test修饰的方法之前运行,AfterAll在Test修饰方法之后运行;
1.3. @BeforeEach,@AfterEach
public class JunitTest {@Testvoid Test01() {System.out.println("-------这是第一个测试用例---------");}@Testvoid Test02() {System.out.println("-------这是第二个测试用例---------");}@BeforeEachvoid Startv1(){System.out.println("------------开始执行一条测试用例------------");}@AfterEachvoid Endv1(){System.out.println("------------一条测试用例执行结束------------");}
}
测试结果如下:
我们在进行测试的时候,如果每一个测试用例在测试开始和结束之后都需要进行操作,就要使用@xxxeach的注解;如果测试的时候所有的测试用例在开始和结束之后只需要进行一次操作。就使用@xxxall的注解;
2. 测试用例顺序指定
指定顺序的注解如下所示:
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {@Order(2)@Testvoid Test01() {System.out.println("-------这是第一个测试用例---------");}@Order(1)@Testvoid Test02() {System.out.println("-------这是第二个测试用例---------");}@BeforeEachvoid Startv1(){System.out.println("------------开始执行一条测试用例------------");}@AfterEachvoid Endv1(){System.out.println("------------一条测试用例执行结束------------");}
}
我们要在类名和方法名前分别添加相对应的注解;
测试结果如下所示:
3. 参数化
3.1 单参数
//单参数@ParameterizedTest@ValueSource(ints = {1,2,3,4})void Test03(int x){System.out.println("接收的参数是x + "+ x);}
测试结果如下所示:
单参数的局限性: 只能接受一种类型的参数,对应的test03()方法只能接受一个参数x;
3.2 多参数
//多参数@ParameterizedTest@CsvSource({"'沈梦瑶',22"})void Test04(String name,int age){System.out.println(name + "今年" + age + "岁");}
测试结果如下所示:
注意事项:当写了上面代码中的两个注解之后,如果在写@test注解,我们的测试用例在运行的过程中就会报错,显示没有参数被注册;主要是因为@test注解的存在导致多参数注解在调用时被忽略;
错误代码和结果如下所示:
//多参数@Test@ParameterizedTest@CsvSource({"'沈梦瑶',22"})void Test04(String name,int age){System.out.println(name + "今年" + age + "岁");}
其结果如下所示:
多参数读取文件中的数据,并进行操作;建议将文件创建到resource中,如下所示:
代码如下:
// 多参数,读取文件中的数据,进行操作@ParameterizedTest@CsvFileSource(resources = "test01.csv")void Test05(String name, int age) {System.out.println("name:" + name + ", age:" + age);}
测试结果如下:
3.3 通过方法生成参数
public static Stream<Arguments> Generate() {return Stream.of(Arguments.arguments("沈梦瑶",22),Arguments.arguments("袁一琦",18));}// 通过方法生成测试数据@ParameterizedTest@MethodSource("Generate")void Test06(String name, int age) {System.out.println("姓名:" + name + "年龄:" + age);}
测试结果如下所示:
4. 测试套件管理
@suite
@Suite
//通过class运行测试用例
@SelectClasses({JunitTest1.class,JunitTest.class})
//通过包运行测试用例
@SelectPackages(value = {"example"})
public class RunTest {
}
结果如下:
ps:本次的内容就到这里了,如果对你有所帮助的话就请一键三连哦!!!
封面截图来自刘姝贤的毕业公演的pv;
url:【流水线的流水账】江西几日游_哔哩哔哩_bilibili