为什么JUnit Suite类(在我的例子中称为TestSuite.class)不会执行自己的Test,Before和After注释?它只执行它自己的BeforeClass,AfterClass,然后是套件测试类的所有注释。我通过创建一个围绕这个理论的测试项目证明了这种情况:https://gist.github.com/djangofan/5033350为什么JUnit套件类不执行自己的Test,Before和After注释?
任何人都可以参考我在何处解释?我需要真正理解这一点。
为什么JUnit Suite类(在我的例子中称为TestSuite.class)不会执行自己的Test,Before和After注释?它只执行它自己的BeforeClass,AfterClass,然后是套件测试类的所有注释。我通过创建一个围绕这个理论的测试项目证明了这种情况:https://gist.github.com/djangofan/5033350为什么JUnit套件类不执行自己的Test,Before和After注释?
任何人都可以参考我在何处解释?我需要真正理解这一点。
因为TestSuite本身不是Test。这些注释仅用于单元测试。一个例子见here。
public class FeatureTestSuite {
// the class remains empty <----- important for your question
}
TestSuite是识别您希望应用某些常见行为的一组测试的一种方法。
也许更好地解释一个例子。
所以你说你正在一个数据库MyDB的订单表上做一些基本的CRUD测试。 每个人都需要mydb在那里和订单表存在,所以你把它们放在一个套件中。它建立了数据库和表,测试运行,然后在套件超出范围之前,数据库被删除,一切都很好,干净,为下一次测试运行。否则,你必须在每次昂贵的测试中做到这一点,或者更糟的是,以前测试的测试数据会导致其他测试数据经常表面上随机失败,因为您可能会在它们之间创建隐式依赖关系。 还有其他方法可以达到同样的效果,但他们混淆了你的测试,你必须记得给他们打电话。
您不必测试它。如果它没有完成,你的测试都不会执行。
我认为我提供的例子已经完全说明了这一点。 – djangofan 2013-02-26 02:27:17
正如其他人所说,这是因为TestSuite
不是Test
。它只是一个带有注释的类来对其他测试进行分组,以便运行更为方便。
但它确实有一个特殊的属性,那就是执行@BeforeClass
和@AfterClass
。这些功能可以为套件提供全局设置/拆卸。它不执行任何测试(包括@After
,@Before
或任何规则)。
在这种情况下,我的测试套件用@Test注释,所以在这种情况下,它是一个测试,也不只是一个简单的测试套件,它是一个测试套件+测试。 – djangofan 2013-02-26 02:26:46
根据JUnit文档,它是一个或另一个,而不是两个。 – 2013-02-26 03:30:50
你能提供一个链接吗?我到处看着。我发现没有什么说你不能拥有一个包含自己测试的套件。 – djangofan 2013-02-26 15:45:13