一.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");
}
}
结果:
三.参数化: 测试方法传参.
去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.结果
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.结果