JUnit 测试框架
创始人
2024-04-22 16:39:52

JUnit

  • 注解
    • @test 注解
    • @BeforeEach 注解
    • @BeforeAll
    • @ AfterEach
    • @AfterAll
  • 断言
    • assertEquals
    • assertNotEquals
    • assertTrue
  • 用例执行顺序
  • 测试套件
    • 指定类,添加到套件中并执行
    • 一次添加一个包的类
  • 参数化
    • 单参数
    • 多参数
    • 借助文件
    • 动态参数

注解

@test 注解

通过对方法加上 @test 注解,就可以直接运行方法进行测试:

@Test
void Test() {ChromeDriver driver = new ChromeDriver();driver.get("https://www.baidu.com");driver.findElement(By.cssSelector("#kw")).sendKeys("火锅");driver.quit();
}

@BeforeEach 注解

就是在执行其它测试方法之前,会先执行这个注解的方法:

@BeforeEach
void aaa() {System.out.println("aaa");
}@Test
void bbb() {System.out.println("bbb");
}@Test
void ccc() {System.out.println("ccc");
}

运行结果如下:
在这里插入图片描述

@BeforeAll

不过要注意的是 @BeforeAll 注解的方法必须是 static 的:

@BeforeAll
@Test
static void aaa() {System.out.println("aaa");
}@Test
void bbb() {System.out.println("bbb");
}@Test
void ccc() {System.out.println("ccc");
}

运行结果如下:
在这里插入图片描述

@ AfterEach

@AfterEach 注解就是在方法之后执行这个方法:

@AfterEach
void aaa() {System.out.println("aaa");
}@Test
void bbb() {System.out.println("bbb");
}@Test
void ccc() {System.out.println("ccc");
}

运行结果如下:
在这里插入图片描述

@AfterAll

@AfterAll 注解的作用是在所有测试方法后执行:

@AfterAll
static void aaa() {System.out.println("aaa");
}@Test
void bbb() {System.out.println("bbb");
}@Test
void ccc() {System.out.println("ccc");
}

运行结果如下:
在这里插入图片描述

断言

assertEquals

通过 Assertions.assertEquals 可以判断元素的 value 值与期望值相不相等:

@Test
public void test1() {//测试百度首页内容显示是否正确ChromeDriver driver = new ChromeDriver();//进入百度网站driver.get("https://www.baidu.com");String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");Assertions.assertEquals("百度一下",text);driver.quit();
}

因为预期结果与实际结果是一样的,所以测试是可以通过的。

assertNotEquals

和 assertEquals 正好相反,也就是与期望值不一样的时候,可以通过:

@Test
public void test1() {//测试百度首页内容显示是否正确ChromeDriver driver = new ChromeDriver();//进入百度网站driver.get("https://www.baidu.com");String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");Assertions.assertNotEquals("百度一下",text);driver.quit();
}

因为与期望值一样,所以这里是不通过的。

assertTrue

参数是一个表达式,如果表达式为真,就通过:

@Test
public void test1() {//测试百度首页内容显示是否正确ChromeDriver driver = new ChromeDriver();//进入百度网站driver.get("https://www.baidu.com");String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");Assertions.assertTrue(text.equals("百度一下"));driver.quit();
}

用例执行顺序

通过 JUnit 里面提供的方法来手动设置用例的执行顺序。通过 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 方法排序来完成。不排序的时候:

public class AutoTest {@Testvoid aaa() {System.out.println("aaa");}@Testvoid bbbbb() {System.out.println("bbb");}@Testvoid cccc() {System.out.println("ccc");}@Testvoid dddddd() {System.out.println("ddd");}
}

运行结果如下:
在这里插入图片描述

排序的时候 通过 @Order 注解来进行排序,标注执行顺序:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class AutoTest {@Test@Order(1)void aaa() {System.out.println("aaa");}@Test@Order(2)void bbbbb() {System.out.println("bbb");}@Test@Order(3)void cccc() {System.out.println("ccc");}@Test@Order(4)void dddddd() {System.out.println("ddd");}
}

运行结果如下:
在这里插入图片描述

测试套件

主要就是针对很多个测试类来进行测试,比如说要一次测试多个类,并且去进行测试。

指定类,添加到套件中并执行

适用于添加少量的几个类
在这里插入图片描述
通过 @Suite 来把多个类加在一起,就可以一次性进行测试了:

@Suite
@SelectClasses({AutoTest.class,AutoTest2.class})
public class RunAllSuite {}

运行结果如下:
在这里插入图片描述

一次添加一个包的类

通过 @SelectPackages() 注解来实现一次添加一个包里面的测试类。不过要注意的是,测试类的名字,必须是以 Test 结尾的,否则不会进行测试:

@Suite
@SelectPackages("com.example.onlinemusic.autotest")
public class RunAllSuite {}

运行结果如下:
在这里插入图片描述

参数化

单参数

对方法使用 @ParameterizedTest 注解就可以了,要配合 @ValueSource 来找到数据源:

@ParameterizedTest
@ValueSource(strings = {"火锅","辣条","螺蛳粉","面条"})
void test(String name) {System.out.println("name: "+name);
}

数据来源就是 ValueSource 里面的参数。运行结果如下:
在这里插入图片描述

多参数

通过 @CsvSource(value = ) 注解来实现,默认分隔符是 逗号:

@ParameterizedTest
@CsvSource(value = {"火锅,20","辣条,30","螺蛳粉,40","铁锅炖大鹅,50"})
void test(String name, int age) {System.out.println("name: "+name + " age: " + age);
}

运行结果如下:
在这里插入图片描述
也可以通过 delimiterString = 来指定分隔符。

借助文件

通过 @CsvFileSource(resources = ) 来读取文件,然后进行操作,指定文件路径为当前项目下 resources 目录下的 my.scv 文件:

@ParameterizedTest
@CsvFileSource(resources = "/my.csv")
void test(String name, int age) {System.out.println("name: "+name + " age: " + age);
}

动态参数

通过 @MethodSource() 注解来提供参数:

@ParameterizedTest
@MethodSource("test2")
void test1(String x) {System.out.println(x);
}
//定义提供数据的方法,可以是 Stream 流
static Stream test2() {return Stream.of("火锅","辣条","螺蛳粉");
}

运行结果如下:
在这里插入图片描述

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...