SuperAPI AI 工具集

java-junit

测试与质量

查看项目

更新于 10-15 21:52

技能介绍

用途:帮助编写基于 JUnit 5 的有效单元测试,兼顾标准测试与数据驱动测试。

项目设置:使用标准 Maven 或 Gradle 项目结构,测试代码放在 src/test/java;引入 junit-jupiter-api、junit-jupiter-engine 以及用于参数化测试的 junit-jupiter-params 依赖;用 mvn test 或 gradle test 运行测试。

测试结构:测试类以 Test 结尾(如 CalculatorTest);用 @Test 标注测试方法;遵循 Arrange-Act-Assert(AAA)模式;命名采用 methodName_should_expectedBehavior_when_scenario 之类的描述性约定;用 @BeforeEach、@AfterEach 做每个测试的准备与清理,用 @BeforeAll、@AfterAll 做类级别准备与清理(须为静态方法);用 @DisplayName 提供可读名称。

标准测试:每个测试聚焦单一行为,避免一个方法测多个条件;测试应独立且幂等,可任意顺序运行,避免相互依赖。

数据驱动测试:用 @ParameterizedTest 标记参数化测试;@ValueSource 提供简单字面量,@MethodSource 引用返回 Stream、Collection 等的工厂方法,@CsvSource 提供内联逗号分隔值,@CsvFileSource 读取 classpath 上的 CSV 文件,@EnumSource 使用枚举常量。

断言:使用 org.junit.jupiter.api.Assertions 的静态方法(如 assertEquals、assertTrue、assertNotNull);可考虑 AssertJ 等库获得更流畅可读的断言;用 assertThrows 或 assertDoesNotThrow 测试异常;用 assertAll 分组相关断言,确保失败前检查全部断言;断言中可加描述性消息。

Mock 与隔离:使用 Mockito 等框架创建依赖的 mock 对象,用 @Mock 和 @InjectMocks 简化创建与注入,使用接口便于 mock。

测试组织:按功能或组件用包分组;用 @Tag 分类(如 @Tag("fast")、@Tag("integration"));必要时用 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 与 @Order 控制执行顺序;用 @Disabled 并附原因临时跳过测试方法或类;用 @Nested 在嵌套内部类中分组测试。

限制:资料未提供具体版本要求、完整依赖坐标、示例代码或收费信息。