【问题标题】:Why does a JUnit suite class not execute its own Test, Before, and After annotations?为什么 JUnit 套件类不执行自己的 Test、Before 和 After 注释?
【发布时间】:2013-02-25 23:05:03
【问题描述】:

为什么 JUnit Suite 类(在我的例子中称为 TestSuite.class)不执行自己的 Test、Before 和 After 注释?它只执行它自己的 BeforeClass、AfterClass,然后是套件测试类的所有注释。我通过围绕这个理论创建一个测试项目证明了这一点:https://gist.github.com/djangofan/5033350

任何人都可以向我介绍这是在哪里解释的吗?我需要真正理解这一点。

【问题讨论】:

    标签: java junit suite


    【解决方案1】:

    因为 TestSuite 本身并不是测试。这些注释仅用于单元测试。示例见here

    public class FeatureTestSuite {
      // the class remains empty <----- important for your question
    }
    

    【讨论】:

    • 在这种情况下,我的测试套件使用 @Test 注释,因此,在这种情况下,它是一个测试,也不仅仅是一个简单的测试套件,它是一个测试套件 + 测试。
    • 你能提供一个链接吗?我到处看了看。我发现没有任何内容表明您不能拥有包含自己的测试的套件。
    • 是的,我的答案中的链接在我复制的示例代码中明确说明。源代码也很简单。 github.com/junit-team/junit/blob/master/src/main/java/org/junit/…
    • 谢谢。我测试这个问题的完整代码位于:github.com/djangofan/JUnitSuiteCallOrder
    【解决方案2】:

    TestSuite 是一种识别您希望对其应用一些常见行为的测试组的方法。

    也许用一个例子更好地解释一下。

    假设您正在对数据库 MyDB 中的订单表进行一些基本的 CRUD 测试。 每个人都需要有 mydb 和存在的 orders 表,所以你把它们放在一个套件中。它设置数据库和表,运行测试,然后在套件超出范围之前删除数据库,下一次测试运行一切都很好而且干净。否则,您必须在每个昂贵的测试中都这样做,或者更糟糕的是,以前测试的测试数据会导致其他测试经常明显随机失败,因为您会在它们之间创建隐含的依赖关系。 还有其他方法可以实现相同的目标,但它们会使您的测试变得混乱,您必须记住调用它们。

    您不必对其进行测试。如果没有完成,您的任何测试都不会执行。

    【讨论】:

    • 我认为我提供的示例已经充分说明了这一点。
    【解决方案3】:

    正如其他人所说,这是因为 TestSuite 不是 Test。它只是一个带有注解的类,用于对其他测试进行分组,这样运行起来更方便。

    不过,它确实有一个特殊属性,那就是@BeforeClass@AfterClass 的执行。启用这些以允许对套件进行全局设置/拆卸。它不执行任何测试(包括@After@Before 或任何规则)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2017-12-23
      相关资源
      最近更新 更多