目录
1、认识JUnit
2、Junit中常见的注解
1、@Test
2、@Disabled
3、@BeforeAll和@AfterAll
4、@BeforeEach和@AfterEach
5、 @ParameterizedTest:参数化
6、@order
3、断言
1、断言相等【Assertions.assertEquals(预期,比较值)】;相等测试通过
2、断言不相等(Assertions.assertNotEqals(预期,比较值));不相等则让测试通过
3、断言为空:Assertions.assertNull(值)
4、断言不为空:Assertions.assertNotNull(值)
4、测试套件
1、指定一组要执行的测试类(@SelectClasses)
2、指定一个包执行测试用例(@SelectPackages)
1、认识JUnit
JUnit是针对Java编程语言的最流行的单元测试框架,用于庇阿涅和运行测试,提供注释来识别测试方法,提供断言来测试预期结果,提供测试运行来运行测试。JUnit测试可以自动运行并检查自身结果并提供即时反馈。
Selenium和Junit的关系
Selenium是自动化测试框架,JUnit是单元测试框架
拿着一个技术写自动化测试测试用例(Selenium3)
拿着一个技术管理已经编写好的测试用例(JUnit5)
2、Junit中常见的注解
我们在这里主要介绍JUnit5中的注解,JUnit版本,其中的注解也有所不同。在正常的类中,如果我们想要运行一个方法,需要我们在main方法中调用这个方法,但是现在我们在方法上添加下面的注解之后,就可以将该方法运行起来。
注解 | 说明 |
@Test | 表示当前的这个方法为一个测试用例 |
@Disabled | 标识禁用的测试类或者测试方法 |
@BeforeAll | 在所有的测试方法之前执行,并只会执行一次 |
@BeforeEach | 在每个测试方法之前执行 |
@AfterAll | 在所有的测试方法执行完成之后执行,只会执行一次 |
@AfterEach | 在每个测试方法之后执行 |
@ParameterizedTest | 标识参数化测试方法 |
@order | 设置测试方法的执行顺序 |
1、@Test
用来表示当前这个方法为一个测试用例。
@Test
void test01(){
System.out.println("这是JunitTest中的Test01");
}
2、@Disabled
标识禁用的测试类或者测试方法
public class JunitTest {
@Test
void test01(){
System.out.println("这是JunitTest中的Test01");
}
@Disabled
void test02(){
System.out.println("这是JunitTest中的Test02");
}
}
3、@BeforeAll和@AfterAll
因为这两个注解是正对整个类中的方法的,所以需要给这些方法用static修饰
@BeforeAll:在所有的测试方法执行之前执行,只会执行一次
@AfterAll:在所有的测试方法执行之后执行,之后执行一次
public class JunitTest {
@Test
void test01(){
System.out.println("这是JunitTest中的Test01");
}
@Test
void test02(){
System.out.println("这是JunitTest中的Test02");
}
@AfterAll
static void TearDown(){
System.out.println("这是AfterAll的语句");
}
@BeforeAll
static void SetUp(){
System.out.println("这是BeforeAll里面的语句");
}
}
这两注解的使用场景,比如在做UI自动化的时候,通常情况下,我们会将创建驱动、打开网页这些操作放到BeforeAll里面,将关闭浏览器放到AfterAll中。
4、@BeforeEach和@AfterEach
@BeforeEach:在每个测试方法执行之前执行
@AfterAll:在每个测试方法执行之后执行
public class JunitTest {
@Test
void test01(){
System.out.println("这是JunitTest中的Test01");
}
@Test
void test02(){
System.out.println("这是JunitTest中的Test02");
}
@AfterEach
void TearDown(){
System.out.println("这是AfterEach的语句");
}
@BeforeEach
void SetUp(){
System.out.println("这是BeforeEach里面的语句");
}
}
5、 @ParameterizedTest:参数化
🍂单参数
1️⃣单参数使用@ValueSource获取数据
@ParameterizedTest
@ValueSource(strings = {"1","2","3"})
void Test03(String num){
System.out.println(num);
System.out.println("-----------------");
}
2️⃣单参数@CsvfileSource(resources= "test01.csv")获取参数 。
@ParameterizedTest
@CsvFileSource(resources = "test01.csv")
void Test06(String name){
System.out.println(name);
}
这个方法的执行次数根据.csv文件中数据行数来执行。
🍂多参数获取,
public static Stream<Arguments> Generator() {
return Stream.of(Arguments.arguments(1,"张三"),
Arguments.arguments(2,"李四"),
Arguments.arguments(3,"王五"));
}
@ParameterizedTest
@MethodSource("Generator")
void test04(int num,String name){
System.out.println(num+":"+name);
}
6、@order:
🍂按照程序员指定的顺序执行
@order注解是Junit5中用来指定测试方法的执行顺序的,@order搭配@TestMethodOrder(MethodOrder.OrderAnnotation.class)【指定测试方法按照程序员设定的顺序执行】来使用。
可以看到上图中的方法执行顺序,并没有按照方法的编写顺序执行。这里的测试方法在没有设置执行顺序的时候,这些测试方法的执行顺序不一定是按照从上到下的顺序执行的,这里还是要看Junit5内部是如何设计测试方法的执行顺序的。
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest1 {
@Order(1)
@Test
void A(){
System.out.println("这是JunitTest的A");
}
@Order(2)
@Test
void test01(){
System.out.println("这是JunitTest中的Test01");
}
@Order(3)
@Test
void test02(){
System.out.println("这是JunitTest中的Test02");
}
@Order(4)
@Test
void B(){
System.out.println("这是JunitTest的B");
}
}
可以看到我们添加了@TestMethodOrder(MethodOrder.OrderAnnotation.class)注解和@Order注解,现在这些测试方法按照我们设定的顺序进行执行了。
🍂随机顺序执行测试方法
使用@TestMethodOrder(MethodOrder.Random.class)注解,来进行随机的执行顺序,这个时候就不需要再测试方法上添加@Order注解来指定执行顺序了。
@TestMethodOrder(MethodOrderer.Random.class)
public class JunitTest1 {
@Test
void A(){
System.out.println("这是JunitTest的A");
}
@Test
void test01(){
System.out.println("这是JunitTest中的Test01");
}
@Test
void test02(){
System.out.println("这是JunitTest中的Test02");
}
@Test
void B(){
System.out.println("这是JunitTest的B");
}
3、断言
断言方法 | 说明 |
assertEquals(expected,actual) | 验证两个数据是否相等,相等测试通过 |
assertNotEquals(expected,actual) | 验证两个数据是否不相等,不相等测试通过 |
assertNotNull(expected,actual) | 验证对象是否为不为空,不为空测试通过 |
assertNull(expected,actual) | 验证对象是否为空,为空测试通过 |
1、断言相等【Assertions.assertEquals(预期,比较值)】;相等测试通过
@ParameterizedTest
@ValueSource(ints = {1})
void Test03(int num) {
Assertions.assertEquals(1, num);
}
2、断言不相等(Assertions.assertNotEqals(预期,比较值));不相等则让测试通过
@ParameterizedTest
@ValueSource(ints = {1})
void Test03(int num) {
Assertions.assertNotEquals(2, num);
}
3、断言为空:Assertions.assertNull(值)
@Test
void Test4(){
String str = null;
Assertions.assertNull(str);
}
4、断言不为空:Assertions.assertNotNull(值)
@Test
void Test4(){
String str = "zhangsan";
Assertions.assertNotNull(str);
}
4、测试套件
在Junit5中,@Suite注解用于将多个测试类组合成一个测试套件。测试条件是一种组织测试用例的方式,可以将多个测试类组合在一起执行。这对于在项目中有多个相关的测试类是非常有用,可以方便的运行所有的相关测试用例。
使用@Suite注解时,需要将注解添加到一个测试类上,该类将作为测试套件的主类,用于组织和执行其他测试类。
1、指定一组要执行的测试类(@SelectClasses)
@SelectClasses注解用于选择要运行的测试类,它允许指定一组类,JUnit将仅运行这些类中的测试用例。这些类的执行顺序时按照这些类的添加顺序执行。
//设置该类为套件测试的主类
@Suite
//选择要运行的测试类
@SelectClasses({JunitTest.class,JunitTest1.class})
public class RunSuite {
}
2、指定一个包执行测试用例(@SelectPackages)
在Junit5中,@SelectPackages注解用于选择要运行测测试包,它允许指定一个或多个包,Junit将仅运行这些包中的测试用例。
package Test08;
import org.junit.jupiter.api.Test;
public class Test07 {
@Test
void Test007(){
System.out.println("Test08 Test07 Test007");
}
}
package Test09;
import org.junit.jupiter.api.Test;
public class Test09 {
@Test
void Test01(){
System.out.println("Test09 Test09 Test01");
}
}
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
//设置该类为套件测试的主类
@Suite
//选择要运行的测试包
@SelectPackages(value = {"Test09", "Test08"})
public class RunSuite {
}