JUnit与Mockito框架中@Ignore注解工作原理及使用疑问
@Ignore 注解的工作机制
首先明确:@Ignore 是JUnit 4原生提供的测试标记注解,Mockito本身不提供、也不干涉这个注解的运行逻辑——Mockito只是配合JUnit做依赖Mock的工具,所有跳过测试的逻辑全由JUnit的测试执行器实现:
- JUnit启动扫描测试类时,会优先识别类、方法上的
@Ignore标记:标记在类上会直接跳过整个类的所有测试方法,标记在单个方法上仅跳过对应方法。 - 被标记的测试方法不会进入实际执行流程,既不会运行方法内部的测试代码,也不会触发该方法对应的
@Before/@After单方法生命周期回调,自然也不会走到Mockito初始化Mock对象的步骤。 - 结果统计层面,被忽略的测试不会被计入通过、失败、异常的计数,只会在测试报告中单独归类为「已忽略测试」,如果你在注解里写了备注参数,备注内容会直接展示在报告里,示例写法如下:
@Ignore("依赖的支付沙箱环境临时关停,等环境恢复后启用") @Test public void testPayCallbackLogic() { // 该段代码不会被执行 }
补充:JUnit 5中已经将同等作用的注解重命名为@Disabled,运行逻辑和@Ignore完全一致。
@Ignore 注解的实际作用,以及和直接删除测试方法的区别
很多初学者会觉得“反正不跑,留着和删了没差”,实际上二者的使用场景完全不同:
- 保留测试上下文,显式标记技术债务:绝大多数时候跳过测试不是因为测试没用,只是临时不具备运行条件——比如依赖的外部服务不可用、对应功能还在开发中、测试本身有已知Bug暂时没排期修复。这时候给测试加
@Ignore配上原因备注,相当于在代码里留了公开的待办提示,所有看代码、看测试报告的人都能明确知道“这里有个待恢复的测试场景”,不会出现“大家都忘了要测这个点”的问题。 - 降低测试恢复的成本:如果直接删除测试方法,后续条件满足要恢复测试时,需要翻版本控制历史找旧代码,还要重新回忆当时的测试逻辑、场景边界;用
@Ignore标记的话,测试代码就在当前代码库中,只要把注解去掉就能直接运行,没有额外的追溯成本。 - 保证测试债务的可见性:被忽略的测试会在所有测试报告中单独列项统计,团队可以直观看到当前有多少测试被跳过、每个跳过的原因是什么,方便后续排期清理;如果直接删除测试,这些未覆盖的场景就会彻底从质量监控视野里消失,很容易引发线上问题。
只有一种情况你应该直接删除测试方法:当测试对应的业务场景已经完全下线、测试逻辑彻底失去存在价值的时候。只要测试对应的业务需求还在线上,只是临时跑不通,就应该用
@Ignore标记保留,而不是直接删除。
内容的提问来源于stack exchange,提问作者Abhishek Lc
相关产品推荐
相关产品推荐

