为什么 JUnit Suite 类(在我的例子中称为 TestSuite.class)不执行自己的 Test、Before 和 After 注释?它只执行它自己的BeforeClass、AfterClass,然后是套件测试类的所有注释。我通过围绕这个理论创建一个测试项目证明了这一点: https ://gist.github.com/djangofan/5033350
任何人都可以参考我解释的地方吗?我需要真正理解这一点。
为什么 JUnit Suite 类(在我的例子中称为 TestSuite.class)不执行自己的 Test、Before 和 After 注释?它只执行它自己的BeforeClass、AfterClass,然后是套件测试类的所有注释。我通过围绕这个理论创建一个测试项目证明了这一点: https ://gist.github.com/djangofan/5033350
任何人都可以参考我解释的地方吗?我需要真正理解这一点。
因为 TestSuite 不是测试本身。这些注释仅用于单元测试。有关示例,请参见此处。
public class FeatureTestSuite {
// the class remains empty <----- important for your question
}
TestSuite 是一种识别一组你希望应用一些常见行为的测试的方法。
也许用一个例子更好地解释。
假设您正在对数据库 MyDB 中的订单表进行一些基本的 CRUD 测试。每个人都需要有 mydb 和存在的 orders 表,所以你把它们放在一个套件中。它设置数据库和表,运行测试,然后在套件超出范围之前删除数据库,一切都很好并且干净,可以用于下一次测试运行。否则,您必须在每个昂贵的测试中都这样做,或者更糟糕的是,以前测试的测试数据会导致其他测试经常明显随机失败,因为您会在它们之间创建隐式依赖关系。还有其他方法可以实现相同的目标,但是它们会使您的测试变得混乱,您必须记住调用它们。
你不必测试它。如果没有完成,您的任何测试都不会执行。
正如其他人所说,这是因为 aTestSuite
不是 a Test
。它只是一个带有注解的类,用于对其他测试进行分组,这样运行起来更方便。
然而,它确实有一个特殊的属性,那就是 and 的@BeforeClass
执行@AfterClass
。启用这些以允许对套件进行全局设置/拆卸。它不执行任何测试(包括@After
,@Before
或任何规则)。