@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