第一個問題是Test3使用@RunWith(Suite.class)
,但不包含@Suite.SuiteClasses({Test3.class, .....})
。這產生了一個IntializationError: class 'Test3' must have a SuiteClasses annotation
。既然你不打算在Test3下面有任何類,這個註解應該被刪除。
Exception: No runnable methods
的第二個問題幾乎總是由於忘記將@Test
添加到測試中。你沒有把樣品放在你的樣品中,所以我不知道這是否是真實的情況,但這是最可能的原因。
以下是你的代碼的工作版本,它允許測試從任何類運行:
Test1.java
import org.junit.runner.*;
import org.junit.runners.*;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test2.class})
public class Test1 {
}
Test2.java
import org.junit.runner.*;
import org.junit.runners.*;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test3.class})
public class Test2 {
}
Test3.java
import static org.junit.Assert.*;
import org.junit.*;
public class Test3 {
@Test
public void testTrue(){
assertTrue(true);
}
}
至於是否有更好的方法來組織東西,我想這隻取決於你如何決定創建類。由於您可以將套件添加到套件中,因此如您所示,您可以創建依賴於所有內容的更小的套件塊,如樹。例如,我通常所做的是:
AllTestSuite
TextParsingSuite
GuiSuite
SwingSuite
JavaFXSuite
FileIOSuite
將測試添加到最相關的套件中。最後,我認爲我沒有任何超過10個測試課程或套件的套件。如果我這樣做,是時候創建一個新的子套件。換句話說,沒有「巨大的名單」,只是很多較小的名單被組合成另一個名單,以便有效地製作一個大名單。
我想你可以使用一些工具來動態找到所有包含測試的Java類,但JUnit本身不支持這種行爲(它只運行你告訴它的測試,我個人認爲這是一件好事)。
刪除所有Test3上的@RunWith(Suite.class)並添加一個錯過的註釋,其中一個Test2s修復了所有問題。然而,這似乎並不是做這件事的最好方法。有沒有更好的方法來運行特定目錄下的所有測試? – Spyder 2012-01-30 20:52:37