2013-02-25 843 views
0

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

任何人都可以参考我在何处解释?我需要真正理解这一点。

回答

1

因为TestSuite本身不是Test。这些注释仅用于单元测试。一个例子见here

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

在这种情况下,我的测试套件用@Test注释,所以在这种情况下,它是一个测试,也不只是一个简单的测试套件,它是一个测试套件+测试。 – djangofan 2013-02-26 02:26:46

+0

根据JUnit文档,它是一个或另一个,而不是两个。 – 2013-02-26 03:30:50

+0

你能提供一个链接吗?我到处看着。我发现没有什么说你不能拥有一个包含自己测试的套件。 – djangofan 2013-02-26 15:45:13

0

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

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

所以你说你正在一个数据库MyDB的订单表上做一些基本的CRUD测试。 每个人都需要mydb在那里和订单表存在,所以你把它们放在一个套件中。它建立了数据库和表,测试运行,然后在套件超出范围之前,数据库被删除,一切都很好,干净,为下一次测试运行。否则,你必须在每次昂贵的测试中做到这一点,或者更糟的是,以前测试的测试数据会导致其他测试数据经常表面上随机失败,因为您可能会在它们之间创建隐式依赖关系。 还有其他方法可以达到同样的效果,但他们混淆了你的测试,你必须记得给他们打电话。

您不必测试它。如果它没有完成,你的测试都不会执行。

+0

我认为我提供的例子已经完全说明了这一点。 – djangofan 2013-02-26 02:27:17

0

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

但它确实有一个特殊的属性,那就是执行@BeforeClass@AfterClass。这些功能可以为套件提供全局设置/拆卸。它不执行任何测试(包括@After,@Before或任何规则)。

相关问题