簡體   English   中英

TestNG運行JUnit測試,但不報告所有結果

[英]TestNG running JUnit tests but not reporting all results

背景:
我有一系列使用JUnit編寫的172個集成測試。 由於我們的項目需要使它們在嵌入式ARM芯片上運行,因此必須將測試編譯到jar中並使用命令行運行。 在編寫測試后,我們意識到JUnit不支持將xml輸出作為默認庫的一部分(這是jenkins所必需的)。 我們將TestNG添加到我們的項目中是因為它提供了一種為JUnit測試輸出XML結果的簡單方法。

我們正在使用以下命令運行測試: /usr/local/frc/JRE/bin/java -ea -jar wpilibJavaIntegrationTests-0.1.0-SNAPSHOT.jar -junit -testclass edu.wpi.first.wpilibj.test.TestSuite

TestSuite有點像這樣:

@RunWith(Suite.class)
@SuiteClasses({
    WpiLibJTestSuite.class,
    CANTestSuite.class,
    CommandTestSuite.class,
    SmartDashboardTestSuite.class
})
public class TestSuite{
    static{
        //Some basic java.util.logging setup stuff
    }
}

列出的每個套件在相似格式的類中列出了自己的一組測試類。

問題:
所有172個測試都由TestNG運行,但是它僅報告運行81個測試,而未報告某些失敗(實際上有兩個測試失敗,但僅報告了一個)。

===============================================
Command line suite
Total tests run: 81, Failures: 1, Skips: 8
===============================================

似乎未報告的測試是@RunWith(Parameterized.class)是否有任何方法可以使TestNG正確識別這些測試並適當地報告其結果?

您將不得不將其更改為TestNG的執行方式。 (您可能應該在代碼中掃描從junit導入的內容,並將其替換為相應的TestNG構造。)

這很容易做到,因為大多數斷言語句與JUnit語句幾乎相同(實際上,有幾個框架可以將所有測試自動轉換為TestNG),並且可以從JUnit剝離測試類的直接繼承。

為此,您需要在TestNG中使用數據提供者注釋測試方法:

@Test(dataProvider = "MyProvider")
public void testSomeStuff() {}

然后使用任一2D數組實現相應的提供程序(如果您的測試用例很小並且已經知道):

@DataProvider(name = "MyProvider")
public Object[][] myDataProvider() {}

或者如果您的測試用例很大或未知,則使用以下命令:

@DataProvider(name = "MyProvider")
public Iterator<Object[]> myDataProvider() {}

本文可能有助於理解JUnit和TestNG之間的差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM