我有两个测试类和一个初始化一些公共资源的套件。在所有类中都有使用@BeforeClass
注释的方法 - 套件以及测试类和@AfterClass
仅在套件中。
当我从Eclipse运行一个套装作为一个单独的测试类时,它运行正常,但是当我尝试在项目中运行所有测试时,顺序无效。 Eclipse由于某种原因尝试首先运行测试(由于资源尚未初始化而失败),然后只有套装本身。 Maven似乎也忽略了诉讼。如何配置Maven和Eclipse以正确的顺序运行测试(先适合)并且不从套件外部运行这些测试?
这不是代码重复的问题。问题在于资源无法快速连续地初始化和销毁。这就是为什么我需要一个只能初始化资源一次的套件。
感谢。
答案 0 :(得分:0)
将代码与@BeforeClass和@AfterClass放在每个测试类中。
如果你有很多要测试的类,那就让测试套件抽象化,并确保所有需要tre逻辑的类都继承自测试套件。
答案 1 :(得分:0)
由于多种原因,您使用套件进行拆卸会导致您出现问题,但特别是您无法预测Eclipse(或Maven)执行测试的顺序。有关更全面的解释,请参阅我对Has JUnit4 begun supporting ordering of test? Is it intentional?的回答,但因为Eclipse& maven通过反射(注释)找到类,你无法保证将找到类的顺序。 [*你可以使用maven和runOrder,见下面的第3点]
Eclipse(和Maven)将Suite视为一个Test,它通过相同的机制找到并运行,并且它们的执行顺序高度依赖于JVM。
因此,如果您有套件A(包含测试B和C)和测试D,那么您将执行以下(以不可预测的顺序):
A (which will execute B & C)
B
C
D
一般情况下,你应该尝试保持对称,在同一个地方进行setUp / teardown。
因此,您有以下选择: