簡體   English   中英

JUnit:如何在test utils類中避免“沒有runnable方法”

[英]JUnit: how to avoid “no runnable methods” in test utils classes

我已經從JUnit3.8切換到JUnit4.4。 我使用ant運行我的測試,所有測試都成功運行,但測試實用程序類失敗並顯示“No runnable methods”錯誤。 我使用的模式是在測試文件夾下包含名稱為* Test *的所有類。

我知道跑步者找不到任何用@Test屬性注釋的方法。 但是它們不包含這樣的注釋,因為這些類不是測試。 令人驚訝的是,當在eclipse中運行這些測試時,它並沒有抱怨這些類。

在JUnit3.8中,它根本不是問題,因為這些實用程序類沒有擴展TestCase,所以跑步者沒有嘗試執行它們。

我知道我可以在ant腳本中的junit目標中排除這些特定的類。 但我不想在我添加的每個新實用程序類上更改構建文件。 我也可以重命名課程(但是給課程好名字總是我最弱的人才:-))

這個問題有沒有優雅的解決方案?

使用@Ignore注釋您的util類。 這將導致JUnit不嘗試將它們作為測試運行。

我的具體情況有以下情況。 我們的測試

public class VenueResourceContainerTest extends BaseTixContainerTest

一切都延伸

BaseTixContainerTest

和JUnit試圖運行BaseTixContainerTest。 可憐的BaseTixContainerTest只是試圖設置容器,設置客戶端,訂購一些披薩並放松......男人。

如前所述,您可以使用注釋對類進行注釋

@Ignore

但這導致JUnit報告該測試被跳過(而不是完全被忽略)。

Tests run: 4, Failures: 0, Errors: 0, Skipped: 1

那種煩惱我。

所以我創建了BaseTixContainerTest抽象,現在JUnit真的忽略了它。

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0

假設您已經控制了用於查找測試類的模式,我建議將其更改為匹配*Test而不是*Test* 這樣, TestHelper將無法匹配,但FooTest會。

為了防止JUnit實例化你的測試基類,只需要它

public abstract class MyTestBaseClass { ... whatever... }

(@Ignore報告它被忽略了,我保留暫時忽略的測試。)

  1. 如果這是您的基本測試類,例如AbstractTest,並且您的所有測試都擴展了它,那么將此類定義為abstract
  2. 如果它是Util類,那么最好從類中刪除* Test重命名它是MyTestUtil或Utils等。

使用IDE的代碼完成時要小心,為@Test添加導入。

它必須是import org.junit.Test而不是import org.testng.annotations.Test ,例如。 如果您執行后者,您將獲得“無可運行方法”錯誤。

Ant現在附帶了skipNonTests屬性,該屬性旨在完全按照您的要求進行操作。 無需更改基類來抽象或向其添加注釋。

如何為這些類添加空測試方法呢?

public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
    assertTrue(true); // do nothing;
}

在你的測試類中如果寫入import org.junit.jupiter.api.Test; 刪除它並寫入import org.junit.Test; 在這種情況下,它也是我的工作。

在運行最簡單的一段代碼(使用@Test,@ Before等)時,我也遇到了類似的問題(“沒有可運行的方法......”),並且找不到解決方案。 我使用的是Junit4和Eclipse SDK 4.1.2版。 通過使用最新的Eclipse SDK 4.2.2解決了我的問題。 我希望這可以幫助那些在類似問題上掙扎的人們。

暫無
暫無

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

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