jar包下载:
junit5https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-api/5.10.2/junit-jupiter-api-5.10.2.jar
enginehttps://repo1.maven.org/maven2/org/junit/platform/junit-platform-engine/1.10.2/junit-platform-engine-1.10.2.jar
commonshttps://repo1.maven.org/maven2/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.jar
介绍
JUnit 5是Java编程语言中的一个单元测试框架,它提供了一组API和注解,用于编写和运行测试。以下是JUnit 5的主要特点:
-
支持多种扩展模型:JUnit 5采用了插件架构,开发人员可以通过不同的扩展模型来定制测试框架,以满足其特定需求。
-
改进的注解支持:JUnit 5提供了一系列新的注解,如@Test、@BeforeEach和@AfterEach等,这些注解使得编写测试更加简单和直观。
-
丰富的断言支持:JUnit 5提供了许多新的断言方法,如assertAll()、assertTimeout()和assertThrows()等,这些方法允许开发人员更方便地编写测试用例。
-
支持并行测试:JUnit 5允许在测试执行时并行运行测试用例,从而提高测试执行速度。
-
改进的测试生命周期管理:JUnit 5提供了更细粒度的测试生命周期管理,使得在测试执行过程中可以做更多的控制和定制。
以下是JUnit 5中常见的几个注解和断言方法的详细介绍:
-
注解
- @Test: 表示Junit测试用例的标识注解,用于标记测试方法。
- @BeforeEach: 表示在每个测试方法执行前应该执行的代码块。可以用来初始化测试环境。
- @AfterEach: 表示在每个测试方法执行后应该执行的代码块。可以用来清理测试环境。
- @BeforeAll: 表示在所有测试方法执行前应该执行的代码块。只会在类加载时执行一次。
- @AfterAll: 表示在所有测试方法执行后应该执行的代码块。只会在所有测试方法执行完毕后执行一次。
- @DisplayName: 用于定义测试用例的显示名称。
- @Disabled: 表示将测试方法禁用,不会执行该测试用例。
-
断言方法
- assertEquals(expected, actual): 验证预期值与实际值是否相等。
- assertNotEquals(unexpected, actual): 验证预期值与实际值是否不相等。
- assertTrue(boolean condition): 验证条件是否为真。
- assertFalse(boolean condition): 验证条件是否为假。
- assertNull(Object object): 验证对象是否为空。
- assertNotNull(Object object): 验证对象是否不为空。
- assertArrayEquals(expectedArray, actualArray): 验证两个数组是否相等。
- assertThrows(Class expectedType, Executable executable): 验证指定类型的异常是否被抛出。
- assertTimeout(Duration timeout, Executable executable): 验证方法执行是否超时。
- assertAll(Executable... executables): 验证多个断言是否都成功执行。
项目中使用
编写代码
待测试代码:
public class Math {
public static int add(int a, int b) {
return a + b;
}
public static int subtract(int a, int b) {
return a - b;
}
public static int multiply(int a, int b) {
return a * b;
}
public static double divide(double a, double b) {
if (b == 0) {
throw new IllegalArgumentException("Divisor cannot be zero");
}
return a / b;
}
}
测试用例:
import org.junit.jupiter.api.*;
public class MathTest {
@BeforeAll
public static void beforeAll() {
System.out.println("单元测试开始啦!");
}
@BeforeEach
public void beforeEach() {
System.out.println("方法执行开始");
}
@AfterEach
public void afterEach() {
System.out.println("方法执行结束");
}
@AfterAll
public static void afterAll() {
System.out.println("单元测试结束");
}
@Test
public void testAddition() {
System.out.println("执行加法了");
int result = Math.add(2, 3);
// 断言 Assertions asserEquals(期待结果,方法执行结果);
Assertions.assertEquals(5, result);
}
@Test
public void testSubtraction() {
System.out.println("执行减法了");
int result = Math.subtract(5, 3);
Assertions.assertEquals(2, result);
}
@Test
public void testMultiplication() {
System.out.println("执行乘法了");
int result = Math.multiply(4, 5);
Assertions.assertEquals(20, result);
}
@Test
public void testDivision() {
System.out.println("执行除法了");
double result = Math.divide(10, 2);
Assertions.assertEquals(5.0, result);
// 测试除以0的情况
Assertions.assertThrows(ArithmeticException.class, () -> {
Math.divide(10, 0);
});
}
}
测试结果
解决无法输入的问题
添加:
-Deditable.java.test.console=true
重启IDEA!!
测试
@Test
public void testScan() {
Scanner scanner = new Scanner(System.in);
System.out.println("你输入的是:" + scanner.next());
}