【测试】——JUnit
📖 前言:JUnit 是一个流行的 Java 测试框架,主要用于编写和运行单元测试,用来管理测试用例。本文采用JUnit 5
目录
- 🕒 1. 添加依赖
- 🕒 2. 注解
- 🕘 2.1 @Test
- 🕘 2.2 @BeforeAll @AfterAll
- 🕘 2.3 @BeforeEach @AfterEach
- 🕘 2.4 @Disabled
- 🕒 3. 参数化
- 🕘 3.1 单参数
- 🕘 3.2 多参数
- 🕤 3.2.1 CSV
- 🕤 3.2.2 方法
- 🕒 4. 测试用例的执行顺序
- 🕘 4.1 默认顺序
- 🕘 4.2 指定顺序
- 🕘 4.3 随机顺序
- 🕒 5. 断言
- 🕒 6. 测试套件
🕒 1. 添加依赖
🔎 junit-jupiter-api依赖链接
🕒 2. 注解
🕘 2.1 @Test
这样就不需要main方法就能运行了
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class JUnitTest {
@Test
// @Test 表明当前的方法是一个测试用例
void test01(){
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com/");
}
}
🕘 2.2 @BeforeAll @AfterAll
@BeforeAll
// 当前所有的测试用例执行之前执行这个方法
static void setUp(){
System.out.println("开始执行 @BeforeAll 修饰的方法");
}
@AfterAll
// 当前所有的测试用例执行之后执行这个方法
static void tearDown(){
System.out.println("开始执行 @AfterAll 修饰的方法");
}
在UI自动化测试中,通常情况下,创建驱动,打开网页,放到BeforeAll里面;关闭浏览器放到AfterAlI
🕘 2.3 @BeforeEach @AfterEach
@BeforeEach
// 当前每个测试用例执行之前执行这个方法
void boforeTest(){
System.out.println("开始执行 @BeforeEach 修饰的方法");
}
@AfterEach
// 当前每个测试用例执行之后执行这个方法
void afterTest(){
System.out.println("开始执行 @AfterEach 修饰的方法");
}
🕘 2.4 @Disabled
忽略当前测试用例(当前这个测试用例不执行)
🕒 3. 参数化
参数化中有单参数、多参数、CSV、方法。
🔎 junit-jupiter-params依赖链接
🕘 3.1 单参数
@ParameterizedTest
@ValueSource(strings = {"1","2","3"})
void oneParameter(String str){
System.out.println(str);
}
注意,以下两个注解不能同时用来修饰一个方法。
@Test
@ParameterizedTest
🕘 3.2 多参数
🕤 3.2.1 CSV
@ParameterizedTest
@CsvSource({"1, 2, ''"})
void csvTest(String x,String y,String q){
System.out.println(x);
System.out.println(y);
System.out.println(q); // 空参数
System.out.println("================");
}
@ParameterizedTest
@CsvFileSource(resources = "test01.csv")
void csvTest(int id,String name){
System.out.println("id:" + id + ",name:" + name);
}
🕤 3.2.2 方法
public static Stream<Arguments> Generator() {
return Stream.of(Arguments.arguments(1,"小张"),
Arguments.arguments(2,"小李")
);
}
// 注册参数
@ParameterizedTest
@MethodSource("Generator")
void methodTest(int num,String name){
System.out.println(num + ":" + name);
}
🕒 4. 测试用例的执行顺序
🕘 4.1 默认顺序
public class JunitTest02 {
@Disabled
// 忽略当前测试用例(当前这个测试用例不执行)
@Test
void test01(){
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com/");
}
@Test
void test02(){
System.out.println("这是第2个测试用例");
}
@Test
void test03(){
System.out.println("这是第3个测试用例");
}
@Test
void test04(){
System.out.println("这是第4个测试用例");
}
}
可以看到是从上往下执行的,那么此时我们改变一下测试用例的顺序,将test04放到前面:
可以看到依旧是原先的顺序,是因为JUnit有自己的一套固定顺序。
那么,如何根据指定的顺序来执行测试用例呢?
🕘 4.2 指定顺序
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest02 {
@Disabled
// 忽略当前测试用例(当前这个测试用例不执行)
@Test
void test01(){
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com/");
}
@Order(1)
@Test
void test02(){
System.out.println("这是第2个测试用例");
}
@Test
void test03(){
System.out.println("这是第3个测试用例");
}
@Order(2)
@Test
void test04(){
System.out.println("这是第4个测试用例");
}
}
可以看到,我们是通过注解 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
设定为根据指定的顺序来执行测试用例,通过 @Order
来指定具体的测试用例执行的顺序,没有被 @Order
修饰的测试用例默认最后执行。
🕘 4.3 随机顺序
@TestMethodOrder(MethodOrderer.Random.class)
public class JunitTest02 {
@Disabled
// 忽略当前测试用例(当前这个测试用例不执行)
@Test
void test01(){
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com/");
}
@Order(1)
@Test
void test02(){
System.out.println("这是第2个测试用例");
}
@Test
void test03(){
System.out.println("这是第3个测试用例");
}
@Order(2)
@Test
void test04(){
System.out.println("这是第4个测试用例");
}
}
可以看到每次执行的测试用例顺序不同,而且原先的 @Order
不生效。
🕒 5. 断言
@ParameterizedTest
@ValueSource(ints = {10})
void assertTest(int num){
// 断言相等
Assertions.assertEquals(num,10);
// 断言不相等
Assertions.assertNotEquals(num,11);
// 断言为空
Assertions.assertNull(num);
// 断言不为空
Assertions.assertNotNull(num);
}
🕒 6. 测试套件
测试套件:通过一段代码直接将所有的测试用例跑起来。
🔎 junit-platform-suite依赖链接
把<scope>test</scope>
删去
🔎 jupiter-engine依赖链接
@Suite
@SelectClasses({JUnitTest.class,JunitTest02.class})
public class RunSuite {
}
通过添加以上两个注解就可以将所有需要测试的类运行起来。
执行指定的包:
@Suite
@SelectPackages({"Junitlearn","Junitlearn02"})
public class RunSuite {
}
OK,以上就是本期知识点“Junit”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页