编写JUnit测试主要涉及到创建测试类、使用注解来标记测试方法、应用断言来验证结果,以及可选地使用setup和teardown方法进行资源管理。下面通过一个简单的例子来说明如何使用JUnit 5编写一个基本的单元测试。
示例:测试一个简单计算器类
假设我们有一个简单的Calculator
类,它有两个方法:add
用于加法,subtract
用于减法。
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
接下来,我们将为这个类编写JUnit测试。
创建测试类
首先,我们需要创建一个对应的测试类。测试类通常以Test
结尾,比如CalculatorTest
。测试类应该位于与被测试类相同的包下或其子包中,以便可以直接访问被测试类(如果它们不是public的话)。
使用注解
在测试类中,我们将使用JUnit 5的注解来定义测试方法。
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
int result = calculator.add(3, 4);
assertEquals(7, result, "3 + 4 应该等于 7");
}
@Test
public void testSubtract() {
Calculator calculator = new Calculator();
int result = calculator.subtract(10, 5);
assertEquals(5, result, "10 - 5 应该等于 5");
}
}
@Test
注解标记了一个方法作为测试案例。assertEquals
是一个断言方法,用于比较实际结果和预期结果是否相等,如果不等则测试失败,并打印出提供的消息。
Setup和Teardown
如果有需要在每个测试之前准备环境或之后清理资源,可以使用@BeforeEach
和@AfterEach
注解。
@BeforeEach
public void setUp() {
// 在每个测试开始前执行的初始化代码
calculator = new Calculator();
}
@AfterEach
public void tearDown() {
// 在每个测试结束后执行的清理代码
// 对于这个简单的例子可能不需要,但复杂场景下可能需要释放资源
}
对于更复杂的场景,比如数据库连接的打开和关闭,这些方法就非常有用。
运行测试
使用IDE(如IntelliJ IDEA或Eclipse)或通过构建工具(如Maven或Gradle)来运行测试。测试结果会显示哪些测试通过了,哪些失败了,以及失败的原因。
这就是使用JUnit 5编写和运行一个基本单元测试的流程。随着对框架的熟悉,你可以进一步探索参数化测试、依赖注入、条件测试等高级特性。