IntelliJ IDEA中编写单元测试的完整步骤
单元测试需依赖测试框架(如JUnit 5),IntelliJ IDEA支持通过构建工具(Maven/Gradle)快速添加依赖。
pom.xml中添加JUnit Jupiter依赖(包含API与引擎):<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
build.gradle中添加:testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
添加后点击“Sync Now”同步项目,确保依赖生效。
IntelliJ IDEA提供两种便捷方式生成测试类:
Calculator)中,按下Ctrl+Shift+T(Windows/Mac通用),选择“Create New Test”。Go to | Test(或Navigate | Test)。src/test/java目录,IntelliJ IDEA会自动识别为测试源根);add、subtract),点击“OK”。CalculatorTest),类名遵循“生产类名+Test”命名规范。测试类生成后,需编写具体测试逻辑,核心步骤包括:
@BeforeEach注解的方法(如setUp),在每个测试方法执行前初始化被测试对象(避免重复代码)。@Test注解标记测试方法,方法名需清晰描述测试场景(如testAddPositiveNumbers)。assertEquals、assertTrue)验证实际结果与预期结果是否一致。assertThrows断言方法验证代码是否抛出预期异常(如除零异常)。示例(CalculatorTest类):
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
private Calculator calculator;
@BeforeEach
void setUp() {
calculator = new Calculator(); // 初始化被测试对象
}
@Test
void testAddPositiveNumbers() {
int result = calculator.add(2, 3);
assertEquals(5, result, "2+3应等于5"); // 断言结果正确
}
@Test
void testDivideByZero() {
Exception exception = assertThrows(ArithmeticException.class, () -> {
calculator.divide(5, 0); // 预期抛出ArithmeticException
});
assertEquals("Cannot divide by zero", exception.getMessage()); // 验证异常信息
}
}
注:assertThrows需传入Executable(Lambda表达式或方法引用),并验证异常类型及信息。
Run 'CalculatorTest'(或使用顶部菜单Run | Run 'CalculatorTest')。Run 'testAddPositiveNumbers()'。Ctrl+Shift+F10(Windows/Mac通用)。Debug 'CalculatorTest',IDEA会进入调试模式,可通过调试面板查看变量值、调用栈等信息。测试运行后,IntelliJ IDEA会在底部“Run”窗口显示结果:
Run 'CalculatorTest' with Coverage,IDEA会生成覆盖率报告(显示代码行覆盖、分支覆盖等指标),帮助识别未测试的代码路径。@ParameterizedTest注解,通过@ValueSource、@CsvSource等提供多组参数,避免重复编写相似测试方法。示例:@ParameterizedTest
@ValueSource(ints = {1, 2, 3, 4})
void testMultiplyByTwo(int input) {
assertEquals(input * 2, calculator.multiply(input, 2));
}
@Suite注解将多个测试类组合成一个套件,统一运行。示例:@Suite.SuiteClasses({CalculatorTest.class, AnotherClassTest.class})
class TestSuite {}
@Test
void testGetUserById() {
UserRepository mockRepo = Mockito.mock(UserRepository.class);
when(mockRepo.findById(1)).thenReturn(new User("Alice"));
UserService userService = new UserService(mockRepo);
User user = userService.getUserById(1);
assertEquals("Alice", user.getName());
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。