🚀 快速安装
复制以下命令并运行,立即安装此 Skill:
npx @anthropic-ai/skills install github/awesome-copilot/java-junit
💡 提示:需要 Node.js 和 NPM
JUnit 5+ 最佳实践
您的目标是帮助我使用 JUnit 5 编写有效的单元测试,涵盖标准测试和数据驱动测试方法。
项目设置
- 使用标准的 Maven 或 Gradle 项目结构。
- 将测试源代码放在
src/test/java目录中。 - 为参数化测试添加
junit-jupiter-api、junit-jupiter-engine和junit-jupiter-params的依赖。 - 使用构建工具命令运行测试:
mvn test或gradle test。
测试结构
- 测试类应以
Test结尾,例如,针对Calculator类的测试类应为CalculatorTest。 - 对测试方法使用
@Test注解。 - 遵循“Arrange-Act-Assert”(AAA,即:准备-执行-断言)模式。
- 使用描述性约定命名测试,例如
methodName_should_expectedBehavior_when_scenario(方法名_在什么场景下_应该有什么预期行为)。 - 使用
@BeforeEach和@AfterEach进行每个测试前的初始化和测试后的清理。 - 使用
@BeforeAll和@AfterAll进行类级别的初始化和清理(方法必须是静态的)。 - 使用
@DisplayName为测试类和测试方法提供人类可读的名称。
标准测试
- 保持测试专注于单一行为。
- 避免在一个测试方法中测试多个条件。
- 使测试独立且幂等(可以以任何顺序运行)。
- 避免测试之间的相互依赖。
数据驱动(参数化)测试
- 使用
@ParameterizedTest标记方法为参数化测试。 - 对简单的字面量值(字符串、整数等)使用
@ValueSource。 - 使用
@MethodSource引用一个工厂方法,该方法以Stream、Collection等形式提供测试参数。 - 对内联逗号分隔值使用
@CsvSource。 - 使用
@CsvFileSource引用类路径下的 CSV 文件。 - 使用
@EnumSource传入枚举常量。
断言
- 使用
org.junit.jupiter.api.Assertions中的静态方法(例如,assertEquals、assertTrue、assertNotNull)。 - 为了更流畅和易读的断言,可以考虑使用像 AssertJ 这样的库(
assertThat(...).is...)。 - 使用
assertThrows或assertDoesNotThrow测试异常。 - 使用
assertAll对相关断言进行分组,确保在测试失败前检查所有断言。 - 在断言中使用描述性消息,以便在失败时提供清晰的信息。
模拟与隔离
- 使用像 Mockito 这样的模拟框架为依赖项创建模拟对象。
- 使用 Mockito 的
@Mock和@InjectMocks注解简化模拟对象的创建和注入。 - 使用接口以便于模拟。
测试组织
- 使用包按功能或组件对测试进行分组。
- 使用
@Tag对测试进行分类(例如,@Tag("fast")、@Tag("integration"))。 - 在确实需要时,使用
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)和@Order来控制测试执行顺序。 - 使用
@Disabled临时跳过测试方法或类,并提供跳过原因。 - 使用
@Nested将测试组织在嵌套的内部类中,以获得更好的组织和结构。
📄 原始文档
完整文档(英文):
https://skills.sh/github/awesome-copilot/java-junit
💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)