【问题标题】:JUnit5 - execute a test method without @Test annotationJUnit5 - 执行没有 @Test 注释的测试方法
【发布时间】:2018-04-11 11:35:39
【问题描述】:

我有一个定义@BeforeEach@AfterEach 方法的超类。该类还有一个只在设置了系统属性时才运行的方法——基本上是@EnabledIfSystemPropertyCondition。带有@Test 注解的普通测试在子类中。

这很好用,但条件测试在测试报告中显示为已跳过 - 我想避免这种情况。有什么方法可以在条件下运行测试方法,但在正常情况下不将其视为测试?

这个问题与@Test注解的继承无关。基本问题是有什么方法可以在条件下运行测试方法,但在正常情况下不将其视为测试?

【问题讨论】:

标签: java junit5


【解决方案1】:

实现您想要的最简单的方法是在测试用例中手动检查子句(就像@Paizo 在 cmets 中建议的那样)。 JUnit 有几个特性允许您跳过测试执行,例如带有@RunIf 注释的Junit-ext 项目或特殊的Assume clause,如果不满足此假设,将强制跳过测试。但是这些功能也将测试标记为已跳过,这在您的情况下是不需要的。您可能会考虑的另一种可能性是使用反射的魔力修改代码以在运行时添加/删除注释,但这是不可能的。从理论上讲,我可以想象一种困难的方法,使用 cglib 在运行时对测试类进行子类化并像 Spring 一样管理注释,但首先要问自己是否值得?

我个人的感觉是,您正在尝试修复运行良好且未损坏的东西。报告中跳过的测试不是失败的测试。很酷,您可以从报告中了解是否已执行测试。

希望对你有帮助!

【讨论】:

  • 抱歉,我没有提供任何上下文。为 Eclipse 开发测试自动化工具插件。条件测试属于应用程序库,仅应在记录测试时调用。这时候我动态创建一个Java类并运行它(不需要cglib——我可以使用JDT)。如果我使用跳过测试的标准方式 - 每个用户测试用例都将其显示为跳过的测试并且不可取。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多