2008-10-08 126 views
9

TestCase對象的新(或不同)實例是否用於在JUnit測試用例中運行每個測試方法?或者一個實例被重用於所有測試?JUnit TestCase對象實例化

public class MyTest extends TestCase { 
    public void testSomething() { ... } 
    public void testSomethingElse() { ... } 
} 

在運行這個測試,如何MyTest類的實例被創建?

如果可能,請提供指向文檔或源代碼的鏈接,以便驗證其行爲。

回答

4

我無法在JUnit文檔中找到有關您的問題的明確答案,但anjanb寫道,意圖是每個測試獨立於其他測試,因此可以爲每個測試創建一個新的TestCase實例被運行。

如果你有昂貴的測試設置,你想成爲一個測試類在所有的測試案例分享(「燈具」),您可以使用一個靜態方法@BeforeClass註解來實現這一結果: http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html。但請注意,每個測試仍可能會創建一個新實例,但這不會影響@BeforeTest方法初始化的靜態數據。

8

是的,創建一個單獨的實例。

運行該測試時,創建了2個MyTest實例。

如果你想要一個不同的行爲,一個選擇是使用一個名爲TestNG的類似工具(http://testng.org/doc/)。

+0

感謝您的快速響應。你還可以提供一個鏈接到一個文件或源代碼,我可以驗證這種行爲? – Manki 2008-10-08 01:59:50

+0

您可以通過提供構造函數並向其添加System.out.println來輕鬆驗證它。 – 2008-10-08 08:08:54

2

如果您問這是因爲您擔心數據在您的構造函數中被初始化並重新初始化,請注意,初始化測試用例數據的規定方式是僅通過setUp()和tearDown()。

3

每個測試運行都有一個實例。嘗試

public class MyTest extends TestCase { 
    public MyTest() { System.out.println("MyTest Constructor"); 
    public void setUp() { System.out.println("MyTest setUp"); 
    public void tearDown() { System.out.println("MyTest tearDown"); 
    public void testSomething() { System.out.println("MyTest testSomething"); 
    public void testSomethingElse() { System.out.println("MyTest testSomethingElse"); 
} 

的源代碼包(包括到更新的版本 - 你的和我的示例是JUnit 3)是http://www.junit.org

0

是的,當然。由於此設計,我發現存儲在實例變量中的數據無法在測試之間訪問。