【软件测试】了解JUnit单元测试框架常用注解

目录

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 {
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值