【问题标题】:Is there some kind of "hidden @Ignore" for Java Tests [duplicate]Java测试是否有某种“隐藏的@Ignore”[重复]
【发布时间】:2021-09-13 05:31:57
【问题描述】:

所以我们有一些测试仅用于在本地运行它们。例如,我们有一个使用内部类从云端下载文件的测试。

这个测试不应该在我们的 CI 中运行,所以我们把它放在@Ignore 上。这种方法有两个缺点:

  1. 测试在 CI 中显示为“已忽略”
  2. 您必须在每次运行前删除 @Ignore

所以我想知道有没有什么方法可以让 CI 完全忽略一些测试,所以我只能在本地运行它们?

澄清一下:这不是有条件地忽略测试——而是完全隐藏测试。

【问题讨论】:

  • 我会小心像“@Ignore”这样的包罗万象的工具。您要么忽略损坏的测试、不正确的设置或无用的测试,所有这些都有更大的问题。顺便说一句,如果 @Ignore 是您的解决方案(这里不是真正的解决方案),您可以注释掉 @Test 注释。

标签: java maven junit


【解决方案1】:

JUnit 提供对 @Category (JUnit 4)@Tag (JUnit 5) 的支持,允许您注释您的单个测试或类,然后注释 selecting the categories you want to run from maven(或者您可以使用 excludedGroups 排除您的情况)。

【讨论】:

  • 您是否也可以选择要忽略的类别而不是要运行的类别?
  • 使用 excludedGroups 看起来像 you can
【解决方案2】:

从技术角度来看,可能有很多方法可以解决这个问题。例如,如果你使用 Maven,你可以定义一个自定义的profile,这样当启用时,它excludes 这些测试。

但是,如果没有足够的上下文说明为什么需要这样做,这似乎是一件坏事。理想情况下,您希望测试可以在开发人员机器和 CI 上以相同的方式运行。仅在本地运行测试是有问题的,因为它缺乏 CI 的所有好处。

【讨论】:

  • 谢谢!是的,我们正在使用 Maven。问题是这些“测试”并不是真正的测试,我们只是将它们定义为测试,以便它们可以很容易地从 IDE 中运行出来。所以 CI 根本不需要知道它们。您知道在 IDE 中轻松运行代码的更好方法吗?
  • @MauriceNino 另一种简化main 可运行类的方法。它们不会由 Maven 构建运行。但仍然:如果需要这些“测试”来防止回归,它们应该是 CI 的一部分。
  • 谢谢。不,它们不涵盖任何情况。他们使用的所有东西都已经被带有断言的“真实”测试所覆盖。这些测试仅用于在本地运行。
猜你喜欢
  • 2012-09-26
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
相关资源
最近更新 更多