@shiriam为@Andy Turner已经指出的那样,在运行测试时,你的测试顺序不应该进来的问题。
如果您在执行任何测试之前想要执行的例程,可以在其中一个类中使用静态代码块。
想的东西是这样的:
class TestBootstrap {
// singleton instance
private static final instance;
private boolean initialized;
private TestBootstrap(){
this.initialized = false;
}
public static TestBootstrap getInstance(){
if (instance == null){
instance = new TestBootstrap()
}
}
public void init(){
// make the method idempotent
if (!initialzed){
// do init stuff
initialized = true;
}
}
public boolean isInitialized(){
return initialized;
}
}
然后在测试中使用这样的:
class TestClass1{
@BeforeClass
public void setup(){
TestBootstrap.getInstance().init();
}
@Test
public void testmethod1(){
// assertions
}
// ....
}
class TestClass2{
@BeforeClass
public void setup(){
TestBootstrap.getInstance().init();
}
@Test
public void testmethod11(){
// assertions
}
// ...
}
通过使用单一实例做了设置为测试您确保仅执行一次测试环境的初始化,而与测试类的执行顺序无关。
你不应该在意测试顺序。如果它很重要,那么测试之间就存在着相互依存关系,所以你正在测试行为+相互依赖关系,而不仅仅是行为。以任何顺序执行时,您的测试应以相同的方式工作。 –
我的场景是特定的方法正在访问更新db中的值。在此之前,我需要执行所有的测试。我同意你的观点,但你能否告诉我是否还有其他可能性? – Shriram
@Shriram如果我没有得到你的错误。您需要在所有其他测试类之后执行'TestClass1',然后确保最后执行'testmethod4'来执行? – nullpointer