• 自动化测试3:Junit单元测试框架


    目录

    1.相关技术

    1.1注解

    1.1.1@Test

    1.1.2@Disables 忽略

    1.1.3@BeforeAll @AfterAll

    1.1.4@BeforeEach @AfterEach

    1.2参数化

    1.2.1单参数

    1.2.2多参数

    1.2.3CSV获取参数

    1.2.4方法获取参数

    1.3运行顺序

    1.3.1问题

    1.3.2按指定顺序执行

    1.3.3随机执行

    1.4.断言

    2.测试套件

    2.1通过class运行测试用例

    2.2通过包运行测试用例


    1.相关技术

    1.1注解

    1.1.1@Test

    表示当前的这个方法是一个测试用例

    要引入依赖(中央仓库-->junit-->JUnit Jupiter API » 5.9.1)

    1. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
    2. <dependency>
    3. <groupId>org.junit.jupiter</groupId>
    4. <artifactId>junit-jupiter-api</artifactId>
    5. <version>5.9.1</version>
    6. </dependency>

    1. @Test
    2. void Test01(){
    3. System.out.println("这是Junit中Test01");
    4. }

    1.1.2@Disables

    忽略不运行这个测试用例

    1. @Disabled
    2. void Test02(){
    3. System.out.println("这是Junit中Test01");
    4. }

    1.1.3@BeforeAll @AfterAll

    方法前要加static

    @BeforeAll:在运行其他所有测试用例之前运行 只运行一次      一般存放连接,开启   

    @AfterAll:在运行其他所有测试用例之后运行 只运行一次       一般存放关闭

    1. @BeforeAll
    2. static void SetUp(){
    3. System.out.println("这是BeforeAll的语句");
    4. }
    5. @AfterAll
    6. static void TearDown(){
    7. System.out.println("这是AfterAll的语句");
    8. }

     

    1.1.4@BeforeEach @AfterEach

    @BeforeEach 在运行每一个测试用例之前运行 有几个测试用例运行几次

    @AfterEach 在运行每一个测试用例之后运行 有几个测试用例运行几次

    1. @BeforeEach
    2. void SetUp(){
    3. System.out.println("这是BeforeAll的语句");
    4. }
    5. @AfterEach
    6. void TearDown(){
    7. System.out.println("这是AfterAll的语句");
    8. }

     

    1.2参数化

     引入依赖 中央仓库-->Parameterized-->JUnit Jupiter Params » 5.9.1

    1. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
    2. <dependency>
    3. <groupId>org.junit.jupiter</groupId>
    4. <artifactId>junit-jupiter-params</artifactId>
    5. <version>5.9.1</version>
    6. </dependency>

    1.2.1单参数

    @ParameterizedTest

    @ValueSource(类型+s={,,,})

    1. @ParameterizedTest
    2. @ValueSource(ints={1,2,3})
    3. void Test04(int num){
    4. System.out.println(num);
    5. }
    6. @ParameterizedTest
    7. @ValueSource(strings={"1","2","3"})
    8. void Test05(String num){
    9. System.out.println(num);
    10. }

     

    1.2.2多参数

    @ParameterizedTest

    @CsvSource({,,,})

    1. @ParameterizedTest
    2. @CsvSource({"1,2,3"})
    3. void Test06(String x,String y,String z){
    4. System.out.println(x);
    5. System.out.println(y);
    6. System.out.println(z);
    7. }

     

    1.2.3CSV获取参数

    @ParameterizedTest

    @CsvFileSource(resources="  文件名.csv")

    1. @ParameterizedTest //运行几次取决于csv有几行
    2. @CsvFileSource(resources = "test01.csv")//这个文件必须以csv结尾
    3. void Test06(String name){
    4. System.out.println(name);
    5. }

    test01.csv

    1. 张三1. 李四1. 王五1
    2. 张三2. 李四2. 王五2
    3. 张三3. 李四3. 王五3

     

    1.2.4方法获取参数

    @ParameterizedTest

    @MethodSource("Generator")

    测试数据:

    public static Stream Genertor(){

    return Stream.of(Arguments.arguments(),

    Arguments.arguments(),

    Arguments.arguments(),...

    );
    }

    1. @ParameterizedTest
    2. @MethodSource("Generator")
    3. //接收
    4. void Test07(int num,String name){
    5. System.out.println(num+" : "+name);
    6. }
    7. //测试数据
    8. public static Stream<Arguments> Generator(){
    9. return Stream.of(Arguments.arguments(1,"张三"),
    10. Arguments.arguments(2,"李四"),
    11. Arguments.arguments(3,"王五")
    12. );
    13. }

     

    1.3运行顺序

    1.3.1问题

    更改代码顺序,不改变运行顺序

    执行顺序固定:Junit有自己固定的执行顺序

     

     

    1.3.2按指定顺序执行

    类前加注解@TestMethodOrder(MethodOrder.OrderAnnotation.class)

    每个用例前加@Order(i) 在第i个执行,i从1开始

     

     

    1.3.3随机执行

    @TestMethodOrder(MethodOrder.Random.class)

     

    1.4.断言

    1. //断言相等
    2. Assertions.assertEquals(1,num);
    3. //断言不相等
    4. Assertions.assertNotEquals(2,num);
    5. String str=null;
    6. //断言为空
    7. Assertions.assertNull(str);
    8. //断言不为空
    9. String str1="null1";
    10. Assertions.assertNotNull(str1);

    2.测试套件

    引入依赖

    1. <dependency>
    2. <groupId>org.seleniumhq.selenium</groupId>
    3. <artifactId>selenium-java</artifactId>
    4. <version>3.141.59</version>
    5. </dependency>
    6. <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    7. <dependency>
    8. <groupId>commons-io</groupId>
    9. <artifactId>commons-io</artifactId>
    10. <version>2.11.0</version>
    11. </dependency>
    12. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
    13. <dependency>
    14. <groupId>org.junit.jupiter</groupId>
    15. <artifactId>junit-jupiter-api</artifactId> //注解
    16. <version>5.9.1</version>
    17. </dependency>
    18. <dependency>
    19. <groupId>org.junit.jupiter</groupId>
    20. <artifactId>junit-jupiter-params</artifactId> //参数化
    21. <version>5.9.1</version>
    22. </dependency>
    23. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
    24. <dependency>
    25. <groupId>org.junit.jupiter</groupId>
    26. <artifactId>junit-jupiter-params</artifactId> //参数化
    27. <version>5.9.1</version>
    28. </dependency>
    29. <dependency>
    30. <groupId>org.junit.platform</groupId>
    31. <artifactId>junit-platform-suite</artifactId>
    32. <version>1.9.1</version>
    33. <scope>test</scope>
    34. </dependency>
    35. <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
    36. <dependency>
    37. <groupId>org.junit.platform</groupId>
    38. <artifactId>junit-platform-suite</artifactId>
    39. <version>1.9.1</version>
    40. </dependency>
    41. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
    42. <dependency>
    43. <groupId>org.junit.jupiter</groupId>
    44. <artifactId>junit-jupiter-engine</artifactId>
    45. <version>5.9.1</version>
    46. <scope>test</scope>
    47. </dependency>

    2.1通过class运行测试用例

    1. @Suite
    2. //通过class测试用例执行
    3. @SelectClasses({JunitTest.class,JunitTest01.class,JunitTest02.class})//规定执行顺序
    4. public class RunSuite {
    5. }

     

    2.2通过包运行测试用例

    1. @Suite
    2. @SelectPackages(value ={"Package01","Package02"})
    3. public class RunSuite {
    4. }

     

  • 相关阅读:
    认识运营商机房
    C++ 太卷,转 Java?
    Node.js身份证实名认证接口、身份证识别API
    【Java面试】介绍下Spring IoC的工作流程
    【06】基础知识:React组件实例三大核心属性 - ref
    DDIM代码详细解读(3):核心采样代码、超分辨率重建
    Java小技巧:巧用函数方法实现二维数组遍历
    C++内存管理:其四、使用链表实现简易版内存池
    leetcode 239. Sliding Window Maximum 滑动窗口最大值(困难)
    使用消息队列 queue 实现数据通信
  • 原文地址:https://blog.csdn.net/qq_53190275/article/details/130904500