跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Java测试注解
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Java测试注解 = Java测试注解是Java单元测试框架(如JUnit和TestNG)中用于标记测试方法、配置测试环境及控制测试流程的特殊标记。它们为测试代码提供元数据,使测试框架能够识别和执行特定的测试逻辑。本指南将详细介绍常见的Java测试注解及其用法。 == 核心注解 == 以下是JUnit 5(当前主流版本)中最常用的测试注解: === @Test === 标记一个方法为测试方法。测试框架会自动执行所有带有此注解的方法。 <syntaxhighlight lang="java"> import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class CalculatorTest { @Test void testAddition() { Calculator calc = new Calculator(); assertEquals(5, calc.add(2, 3)); // 预期值, 实际值 } } </syntaxhighlight> '''输出:''' 若测试通过则无输出(静默成功),失败时会显示详细比较信息。 === @BeforeEach / @AfterEach === 分别在'''每个'''测试方法'''之前/之后'''执行: <syntaxhighlight lang="java"> @BeforeEach void setUp() { System.out.println("初始化测试环境"); } @AfterEach void tearDown() { System.out.println("清理资源"); } </syntaxhighlight> === @BeforeAll / @AfterAll === 在'''所有'''测试方法'''之前/之后'''执行(方法需为static): <syntaxhighlight lang="java"> @BeforeAll static void initDatabase() { System.out.println("连接数据库"); } </syntaxhighlight> == 高级注解 == === @DisplayName === 为测试类或方法设置易读的名称: <syntaxhighlight lang="java"> @Test @DisplayName("测试除法→零除异常") void testDivisionByZero() { assertThrows(ArithmeticException.class, () -> calculator.divide(1, 0)); } </syntaxhighlight> === @ParameterizedTest === 参数化测试,允许使用不同参数多次运行测试: <syntaxhighlight lang="java"> @ParameterizedTest @ValueSource(ints = {1, 3, 5, -3}) void testIsOdd(int number) { assertTrue(NumberUtils.isOdd(number)); } </syntaxhighlight> === @Nested === 创建嵌套测试类,展示测试层次结构: <syntaxhighlight lang="java"> class StackTest { Stack<Object> stack; @Nested class WhenNew { @BeforeEach void createStack() { stack = new Stack<>(); } @Test void isEmpty() { assertTrue(stack.isEmpty()); } } } </syntaxhighlight> == 生命周期图示 == <mermaid> graph TD A[@BeforeAll] --> B[@BeforeEach] B --> C[@Test] C --> D[@AfterEach] D --> E[@Test] E --> F[@AfterEach] F --> G[@AfterAll] </mermaid> == 实际案例:用户服务测试 == <syntaxhighlight lang="java"> class UserServiceTest { UserService service; User testUser; @BeforeEach void init() { service = new UserService(); testUser = new User("admin", "secret"); } @Test @DisplayName("成功登录应返回用户令牌") void testSuccessfulLogin() { String token = service.login(testUser.username(), testUser.password()); assertNotNull(token); assertTrue(token.length() > 10); } @Test @DisplayName("错误密码应抛出异常") void testWrongPassword() { assertThrows(AuthenticationException.class, () -> service.login(testUser.username(), "wrong")); } } </syntaxhighlight> == TestNG特有注解 == 虽然JUnit更常见,但TestNG也有独特注解: * <code>@BeforeSuite</code>/<code>@AfterSuite</code> - 测试套件前后执行 * <code>@DataProvider</code> - 更灵活的参数化测试 * <code>@Test(dependsOnMethods = "...")</code> - 定义测试依赖关系 == 最佳实践 == 1. 每个测试方法应只测试一个功能点 2. 使用<code>@DisplayName</code>提高测试报告可读性 3. 初始化代码放在<code>@BeforeEach</code>而非构造函数中 4. 避免在静态<code>@BeforeAll</code>方法中修改可变状态 == 数学公式示例 == 当测试涉及数学计算时,可注明预期公式: <math>E = mc^2</math> 通过掌握这些注解,您可以构建结构清晰、维护性强的单元测试套件。随着测试复杂度的增加,还可以探索更高级的注解如<code>@Tag</code>用于测试分类、<code>@Timeout</code>用于超时控制等。 [[Category:编程语言]] [[Category:Java]] [[Category:Java单元测试]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)