2013-12-16 49 views
1

您好我想在數據提供程序中沒有數據時停止進一步的測試執行。我的數據提供者在運行中動態填充。因此,如果數據提供者中沒有數據,我希望我的測試停止執行。以下是我的代碼片段。如果數據提供程序爲空,則停止testNG的測試執行

package myTest; 

import org.testng.Reporter; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Factory; 
import org.testng.annotations.Test; 

public class NewTest 
{ 
    String str; 
    @DataProvider 
    public Object[][] test123() 
    { 
     System.out.println(" Filling dataprovider."); 
     return new Object[][]{}; 
    } 

    @Factory(dataProvider="test123") 
    public NewTest(String str) 
    { 
     System.out.println("Running through factory."); 
     this.str=str; 
    } 

    @Test 
    public void test1234() 
    { 
     Reporter.log("--->>> running test "+str,true); 
    } 
} 

我希望如果dataprovider爲空,test1234不應該運行。

+0

你運行測試?我想TestNG的自動注意到了這一問題,並如果您的測試沒有采用任何參數,並且您將空的dataProvider傳遞給它,它將不會運行您的測試。 – avinesh

+0

是的,我跑了上面的測試,它產生了所有的報告和所有。這就是我不想生成的東西。所以問題是我有大量的測試,很難通過每個報告,看看測試是否已經運行。所以我希望如果沒有測試數據,那麼就不會生成報告。 –

回答

0

您可以嘗試在不同類別中添加其他方法,並在其上添加工廠 註釋。從這個方法中,你可以調用這個Test Class的構造函數來執行測試。在調用構造函數之前,檢查參數是否正確,並且實際上是想爲該參數運行測試。現在你需要調用這個Factory類。

<code> 

Class NewTestFactory(){ 

@Factory(dataProvider="test123")  
public Object[] executeTests(String str){ 
Object obj[] = new Object[1]; 

     if (str != null){ 
     obj[0] = new NewTest(str) 
     } 
    } 
    return obj 
} 

</code> 
+0

hi neeraj ..在TestNG ..數據提供者只有在工廠提供的情況下運行測試實例時纔可用。所以如果我們嘗試使用上面的方法,我們不會知道該測試實例的數據提供者是否具有值。 –

+0

對不起,你可以把你的數據提供者放在你要放置Factory方法的同一個類中。我相信數據提供者只會被Factory使用,它將進一步將參數傳遞給測試類實例。如果是這種情況,如果你在一個單獨的類中提取出工廠和數據提供者,它應該可以正常工作。 –

0

只需返回一個空的二維數組。 喜歡的東西:

@DataProvider 
    public Object[][] test123() 
    { 
     Object[][] data= null; 
     System.out.println(" Filling dataprovider."); 
     if(someSplCondition) //Returning empty 2D so that test doesn't execute 
      data = Object[0][0] 
     else 
      data = fillTestData() 

     return data; 
    } 

另外,如果你使用Maven,不要忘了把-DfailIfNoTests =假在MVN指令

+0

如果你會注意到那是我做的..返回空2D對象數組..但它仍然繼續並執行測試方法並生成報告 –

相關問題