13.5 Junit5(针对Java的单元测试框架)

一.Junit是针对Java的单元测试框架

二.注解

1.@Test: 当前的方法是一个测试用例. 

a.去maven中央仓库下载依赖(JUnit Jupiter API)

 
        
            org.junit.jupiter
            junit-jupiter-api
            5.9.1
            test
        

b.测试方法可以用public修饰,也可以不修饰,不能用private修饰.

2.@Disabled: 使测试用例失效

3.@BeforeAll,@AfterAll, @BeforeEach, @AfterEach :都要写成静态方法.

a)@BeforeAll: 在所有测试方法执行之前执行的方法.

这里执行的一些任务,比如创建驱动, 打开浏览器.

b)@AfterAll: 在所有测试方法执行之后执行的方法.

这里执行的一些任务,比如关闭浏览器.

c)@BeforeEach: 在每个测试方法执行之前执行的方法.

d)@AfterEach: 在每个测试方法执行之后执行的方法.

注意: 如果有n个测试方法,@BeforeAll和@AfterAll跑1次,@BeforeEach,和@AfterEach跑5次.

4.代码

import org.junit.jupiter.api.*;

public class Test_junit {
    @Test
    public void test1() {
        System.out.println(111);
    }
    @Test
    public void test2() {
        System.out.println(222);
    }
    // 使测试用例失效
    @Disabled
    public void test3() {
        System.out.println(333);
    }
    @BeforeAll
    public static void setUp() {
        System.out.println("BeforeAll");
    }
    @AfterAll
    public static void tearDown() {
        System.out.println("AfterAll");
    }
    @BeforeEach
    public void beforeEach() {
        System.out.println("BeforeEach");
    }
    @AfterEach
    public void afterEach() {
        System.out.println("AfterEach");
    }
}

结果: 

13.5 Junit5(针对Java的单元测试框架)_第1张图片

三.参数化: 测试方法传参.

去maven中央仓库下载依赖(JUnit Jupiter Params)



    org.junit.jupiter
    junit-jupiter-params
    5.9.1
    test

1.单参数

a.代码

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class Test_junit2 {
    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3})
    void test1(int x) {
        System.out.println(x);
    }
}

b.结果

注意: 有n个参数,就会运行n次方法.

2.CSV获取参数(支持多种形式的参数类型的多种参数)

a.代码

方法1:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;

public class Test_junit2 {
    @ParameterizedTest
    @CsvFileSource(resources =  "test1.csv")
    void test1(String str) {
        System.out.println(str);
    }
}

还要在resources目录下创建文件test.csv 

方法2:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;

import java.util.stream.Stream;

public class Test_junit2 {
    @ParameterizedTest
    @CsvSource({"高数1, 英语1, 政治1", "hello1, world2, hw2"})
    void test3(String str1, String str2, String str3) {
        System.out.println(str1 + " " + str2 + " " + str3);
    }
}

b.结果

注意: 在.csv文件有n行参数,就会运行n次方法, 传入空字符串,直接使用单引号.

3.方法获取参数

a.代码

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

public class Test_junit2 {
    @ParameterizedTest
    @MethodSource("Generator")
    void test2(int i, String str) {
        System.out.println(i + " " + str);
    }
    public static Stream Generator() {
        return Stream.of(Arguments.arguments(1, "hello"),
                         Arguments.arguments(2, "world")
                        );
    }
}

b.结果

4.测试用例指定执行顺序

a.代码

import org.junit.jupiter.api.*;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Test_junit {
    @Order(1)
    @Test
    public void test1() {
        System.out.println(111);
    }
    @Order(3)
    @Test
    public void test2() {
        System.out.println(222);
    }
    // 使测试用例失效
    @Order(2)
    @Test
    public void test3() {
        System.out.println(333);
    }

}

b.结果

1)设置顺序前:

2)设置顺序后:

c. 随机的执行方式: 在类上加注释:

@TestMethodOrder(MethodOrderer.Random.class)

5.断言(assert)

1)Assertions.assertEquals( , );

2)Assertions.assertNotEquals( ,  );

3)Assertions.assertNull( str);

4)Assertions.assertNotNull(str);

四.测试套件

传入依赖(suite, engine) 



    org.junit.platform
    junit-platform-suite
    1.9.1
    test




    org.junit.jupiter
    junit-jupiter-engine
    5.9.1
    test



1.通过class运行测试用例

a.代码

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({Test_junit.class, Test_junit2.class})
public class Test_suite {


}

b.结果

13.5 Junit5(针对Java的单元测试框架)_第2张图片 

2.通过包运行测试用例

a.代码

package pack1;

import org.junit.jupiter.api.Test;

public class Test_pack1 {
    @Test
    public void t_p1() {
        System.out.println("Test_pack1");
    }
}
package pack2;

import org.junit.jupiter.api.Test;

public class Test_pack2 {
        @Test
        public void t_p2() {
            System.out.println("Test_pack2");
        }
}
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectPackages({"pack1", "pack2"})
public class Test_suite {


}

b.结果

13.5 Junit5(针对Java的单元测试框架)_第3张图片

你可能感兴趣的:(junit,测试工具)