【问题标题】:How can I run a test class only if another test was passed?只有通过另一个测试,我如何才能运行测试类?
【发布时间】:2014-12-12 19:12:13
【问题描述】:

我正在做一些 Junit 测试,我需要知道如何运行一个测试类,只有当另一个类的特定测试通过时。

【问题讨论】:

  • 理想情况下,您不应依赖其他测试用例来运行测试用例。将它们作为一个测试用例。

标签: java testing junit test-suite


【解决方案1】:

JUnit 中有“类别”功能。 (见:https://github.com/junit-team/junit/wiki/Categories

【讨论】:

    【解决方案2】:

    这个问题已经在this post回复了

    在@Before 函数中,您需要从系统中检索运行时值并检查它是否符合您的要求。如果不停止,一切都会停止

    【讨论】:

      【解决方案3】:

      恕我直言,即使在设计良好的集成测试套件中,这也是一种不好的做法。我会鼓励你重新考虑你的整体测试类设计。

      如果这些测试真的是单元测试,那么它们应该是原子的并且彼此独立。请参阅this post 以获得良好的阅读体验。

      话虽如此,我经常使用 JUnit 4.x 来构建和运行相当大的集成测试套件(测试 RESTful 服务响应的后端功能测试)。如果这是您的用例,我建议您重组您的测试,这样您在 TestClassA 中的一个测试永远不会依赖于 TestClassB 中的测试。这是一个坏主意,因为它会使您的测试更加脆弱。其他开发人员很难理解你的测试意图,作为一个整体。

      当我发现我在多个测试类之间存在依赖关系时,我已经为两个测试类提取了一个“测试超类”,并在该超类中执行我的“设置工作”。或者,您可以分解出一个包含静态方法的实用程序类,用于创建一些复杂的测试条件。

      但是,即使使用 JUnit 作为工具来运行此类“集成”测试,也应该谨慎且谨慎地进行。

      【讨论】:

      • 这并不意味着测试 B 必须在测试 A 之后运行,这可能是测试 A 很快并检查应用程序是否启动而测试 B 很慢并且检查更具体的东西,所以为什么还要麻烦测试B 如果测试 A 失败。
      • @CaptainMan:澄清一​​下,我专门解决了原始发布者的问题:“我正在做一些 Junit 测试,我需要知道如何运行测试类,只有当另一个类的特定测试是通过了。”这个问题完全正确“测试 [class] B 必须在测试 A 之后运行”
      • 我认为我的观点措辞不当。我想说的是,“我如何在 A 之后运行 B”和“只有 A 通过后我如何运行 B”之间存在差异(但我同意,很小的差异)。
      • @CaptainMan:我明白了。同意这一点。
      猜你喜欢
      • 2017-12-27
      • 1970-01-01
      • 2014-09-24
      • 2012-08-23
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      相关资源
      最近更新 更多