目录
配置xml文件,注入依赖
常用注释
1.@Test
2.@BeforeAll和@AfterAll
3.@BeforeEach和@AfterEach
4.@TestMethodOrder
参数化
1.单参数
2.多参数
3.通过方法生成参数
测试用例执行管理
JUnit 是一个流行的 Java 单元测试框架,它为开发者提供了一种简单而有效的方式来编写和执行单元测试。
JUnit 5 是最新版本,也称为 JUnit Jupiter,它引入了许多新特性,如参数化测试、条件测试、扩展模型等,以及更强大的断言方法和注解。
JUnit 可以与许多集成开发环境(IDE)和构建工具(如 Eclipse、IntelliJ IDEA、Maven、Gradle 等)无缝集成,使得测试编写、运行和调试变得更加方便和高效。
配置xml文件,注入依赖
<!-- JUnit Jupiter API 依赖 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<!-- JUnit Jupiter 引擎依赖 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<!-- JUnit Platform 引擎依赖 -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
注:创建的SpringBoot项目不需要引入依赖,直接使用junit注释即可。
常用注释
1.@Test
@Test是 JUnit 框架中的一个注解,用于标识一个方法是一个测试方法。JUnit 框架会在运行测试时自动识别被@Test注解标记的方法,并执行这些方法中的测试代码。@Test注解可以直接用于方法上。
2.@BeforeAll和@AfterAll
@BeforeAll和@AfterAll是 JUnit 框架中的生命周期注解,用于执行在所有测试方法执行之前和之后的操作。它们通常用于执行一次性的设置或清理操作,例如启动或关闭测试环境、连接或关闭数据库等。
public class MyTest {
@BeforeAll
public static void setUp() {
// 在所有测试方法执行之前执行的代码
System.out.println("Before all tests");
}
@AfterAll
public static void tearDown() {
// 在所有测试方法执行之后执行的代码
System.out.println("After all tests");
}
@Test
public void testMethod1() {
// 测试方法1
}
@Test
public void testMethod2() {
// 测试方法2
}
}
3.@BeforeEach和@AfterEach
@BeforeEach和@AfterEach是 JUnit 框架中的生命周期钩子注解,用于在每个测试方法执行前和执行后执行特定的操作。它们通常用于执行一些准备工作或清理工作,以确保测试方法的独立性。
public class MyTest {
@BeforeEach
public void setUp() {
// 在每个测试方法执行之前执行的代码
System.out.println("Before each test");
}
@AfterEach
public void tearDown() {
// 在每个测试方法执行之后执行的代码
System.out.println("After each test");
}
@Test
public void testMethod1() {
// 测试方法1
}
@Test
public void testMethod2() {
// 测试方法2
}
}
4.@TestMethodOrder
通过@TestMethodOrder注解,可以指定测试方法的执行顺序。它可以与 OrderAnnotation.class
、Alphanumeric.class
或 Random.class
结合使用,以决定测试方法的执行顺序。这些选项分别表示按照注解顺序、按照字母数字顺序或者随机顺序执行测试方法。
//这行不能省略
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class OrderedTests {
@Test
@Order(1)
public void testMethod1() {
// 测试方法1
}
@Test
@Order(2)
public void testMethod2() {
// 测试方法2
}
@Test
@Order(3)
public void testMethod3() {
// 测试方法3
}
}
参数化
注意:参数化注释上方不用写@Test注释
1.单参数
单参数只能接收一种类型的参数
@ParameterizedTest用于指定参数化测试方法。参数化测试是一种测试技术,允许通过使用不同的参数多次运行同一个测试方法,以覆盖不同的测试场景。
@ParameterizedTest注解通常与@ValueSource注解一起使用实现单参数
使用@ValueSource注解提供了整数类型的参数{1,2,3}。测试方法会分别以这些参数执行多次。
public class ParameterizedTests {
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
public void testMethod(int value) {
// 使用传入的参数执行测试方法
// 可以在这里编写针对不同参数进行的测试逻辑
}
}
2.多参数
@ParameterizedTest注解通常与@CsvSource注解一起使用实现多参数。允许使用 CSV(逗号分隔值)格式提供测试方法的参数。每行 CSV 数据都会被解析为测试方法的一个参数集。
public class CsvSourceExample {
@ParameterizedTest
@CsvSource({
"apple, 1",
"banana, 2",
"orange, 3"
})
public void testFruits(String fruit, int quantity) {
// 测试逻辑
System.out.println("Fruit: " + fruit + ", Quantity: " + quantity);
}
}
使用 @CsvFileSource
注解读取 CSV 文件并将数据传递给参数化测试方法
@ParameterizedTest
@CsvFileSource(resources="test01.csv")
void Test01(String name,int age){
System.out.println("name: "+name+",age "+age);
}
}
3.通过方法生成参数
@ParameterizedTest注解通常与@MethodSource注解一起使用实现通过方法生成参数
public static Stream<Arguments> Generate() {
return Stream.of(Arguments.arguments("张三", 13), Arguments.arguments("lisi", 14));
}
@ParameterizedTest
@MethodSource("Generate")
void Test02(String name,int age){
System.out.println(name+" "+age);
}
测试用例执行管理
@Suite
//通过class运行测试用例
@SelectClasses({TestClass1.class, TestClass2.class})
public class MyTestSuite {
// 包含要执行的测试类
}
@Suite
//通过包运行测试用例
@SelectPackages("com.example.tests")
public class MyTestSuite {
// 包含要执行的测试包中的所有测试类
}