2012-12-05 57 views
3

我想編寫Java代碼,從一個充滿文件的目錄動態創建多個TestNG測試套件。每個文件對應一個包含基於文件內容的測試的測試套件。關鍵是我需要爲每個套件做特定的設置和拆卸。動態測試套件使用TestNG

我知道我可以使用Factory註解從單個文件動態構建測試。例如:

public class TestFactory { 
    @Factory 
    public Object[] createTestFromFile() throws Exception { 
     ArrayList<MyTest> tests = new ArrayList<MyTest>(); 

     BufferedReader reader = new BufferedReader(new FileReader("test1.txt")); 
     String testData; 
     while ((testData = reader.readLine()) != null) { 
      tests.add(new MyTest(testData)); 
     } 

     return tests.toArray(); 
    } 
} 

public class MyTest { 
    private String testData; 

    public MyTest(String testData) { 
     this.testData = testData; 
    } 

    @Test 
    public void runTest() { 
     assertTrue(testData.equals(testData)); 
    } 

} 

但我怎麼讀多個文件,並創建一個單獨的測試套件對每個文件,每一個不同的一套特定的設置/拆除?

回答

2

也許這可以幫助:Running TestNG programmatically您可以使用XMLSuite類創建動態套件,可能會將套件中的文件名設置爲參數,並將您的設置/拆卸設置爲偵聽器。

+0

構建我自己的測試套件看起來像我期待的方法,但如果我理解正確,我將不得不直接啓動套件的執行。例如:(new TestNG(add suites))。run();這會使得難以從Gradle或Intellij等環境運行測試,而無需編寫更多框架代碼。那時我開始懷疑我爲什麼使用TestNG。 –

+0

我想我沒有得到這個問題,因爲我不熟悉gradle。但就調用而言,您只需將套件添加到main方法中的testng實例並調用它即可。 egList suites = new ArrayList (); suites.add(suite); TestNG tng = new TestNG(); tng.setXmlSuites(suites); tng.run(); –

+0

問題是我沒有主要方法。我依靠我的執行框架來提供。例如,如果我使用Intellij來運行測試,那麼我通過在IDE中右鍵單擊「運行測試」來啓動Intellij的「主要方法」。看完這個問題後,我確信TestNG不能構建一套複雜的測試。在JUnit3中這非常簡單。我不明白爲什麼使用過的案件被撤銷。 –

相關問題