2012-05-14 60 views
1

運行我有幾個,我想用TestNG運行起來DAO單元測試類,然而TestNG的嘗試並行導致一些回滾失敗運行它們。雖然我想運行我的單元測試類順序運行,我也希望能夠指定一個最小時間在下次運行測試之前TestNG的必須等待。這是可以實現的嗎?TestNG的測試順序與時間間隔

P.S.據我所知,TestNG的可以告訴運行在SingleThread測試類的全部測試,我可以指定使用反正組方法調用的順序,所以也許這不是一個問題。

回答

0

怎麼樣一個hard dependency 2次測試之間?如果你寫的:

@Test 
public void test1() { ... } 

@Test(dependsOnMethods = "test1", alwaysRun = true) 
public void test2() { ... } 

然後test2將始終test1後運行

別忘了alwaysRun = true,否則如果test1失敗,test2將被跳過!

+0

嗨Romaintaz,謝謝,但正如我所說的問題是不是與測試類中的測試之間的依賴關係(我已經用於該dependsOnGroups),問題是運行多個測試類,一個接一個地(如在測試套件中)。 – dchucks

0
  1. 如果您不想並行運行您的類,則需要將套件的parallel屬性指定爲false。默認情況下,它是假的。所以我會認爲它應該默認順序運行,除非你調用測試的方式有所改變。

  2. 要在您的類之間添加一點延遲,您可以在用@AfterClass註釋的方法中添加延遲邏輯。 AFAIK testng沒有辦法在testng xml或commandline中指定它。有一個超時屬性,但更多的是用於超時測試,而不是你正在尋找的。

用XML你的測試之間加入延時,即測試代碼,那麼你可以嘗試實施ITestListener - onFinish方法,其中你可以添加你的延遲代碼。它在每個<test>之後運行。如果在每個測試用例之後都需要延遲,那麼在IInvokedMethodListener - AfterInvocation()中實現延遲代碼,AfterInvocation()在每個測試方法運行後運行。當你調用你的套件時,你需要指定監聽器。

希望它有幫助..

0

以下是我在一些測試中使用的。

首先,定義的實用方法是這樣的:

// make thread sleep a while, so that reduce effect to subsequence operation if any shared resource, 
private void delay(long milliseconds) throws InterruptedException { 
    Thread.sleep(milliseconds); 
} 

private void delay() throws InterruptedException { 
    delay(500); 
} 

然後,調用測試方法內的方法中,在結束或開始。

@Test 
public void testCopyViaTransfer() throws IOException, InterruptedException { 
    copyViaTransfer(new File(sourcePath), new File(targetPath)); 
    delay(); 
}