2010-01-26 19 views
5

我正在使用JUnit 3,並且經常需要測試是否正確創建了對象。我的想法是編寫一個MyTestBase類,如下所示,然後擴展到特定情境的單元測試。JUnit擴展基類,並且正在運行該類中的測試

但是在我給出的示例中,MyTests未在MyTestBase中運行測試。

public class MyTestBase extends TestCase { 
    protected String foo; 
    public void testFooNotNull() { 
    assertNotNull(foo); 
    } 
    public void testFooValue() { 
    assertEquals("bar", foo); 
    } 
} 


public class MyTests extends MyTestBase { 
    public void setUp() { 
    this.foo = "bar"; 
    } 
    public void testSomethingElse() { 
    assertTrue(true); 
    } 
} 

我在做什麼錯?

更新道歉。愚蠢的錯誤。我的基類中的測試沒有正確命名。

+0

爲什麼不使用junit 4? – Bozho 2010-01-26 07:41:07

+1

由於系統是用Java 1.4.2編寫的 – 2010-01-26 08:54:36

+0

我已經投票結束這個問題,因爲這只是錯誤的。它沒有提出真正的問題。 – 2010-02-08 09:59:33

回答

4

你說過「MyTests不會在MyTestBase中運行測試」。我試過了,所有測試都被調用,包括MyTestBase中的測試。

+0

您是否使用JUnit 3進行嘗試? – Bozho 2010-01-26 08:56:42

+0

是的,我使用JUnit 3從Eclipse中嘗試了它。我將MyTests類作爲JUnit測試運行,並且所有測試都成功通過。 – 2010-01-26 09:00:41

+0

不錯。那麼問題是無關緊要的:) – Bozho 2010-01-26 11:37:30

2

那麼,你可以製作MyTestBase抽象,這樣它就不會嘗試在基類中運行測試。更好的解決方案是在基類中有setUp,並使其調用抽象方法(例如getFoo())來初始化稍後需要的變量。實際上,如果你有這些抽象方法,你可能會發現你甚至不需要一個設置階段 - 你可以在需要該值的地方調用抽象方法,而不是使用實例變量。顯然這取決於確切的情況,但在許多情況下,這可能會更清潔。

0

你所試圖做的是不是最合適的方式來實現自己的目標:

如果您想擁有共同的功能,使一些檢查

  • 在實用類定義它,在static方法
  • 在超類定義,並從每個測試方法調用它
0

我不知道你想做什麼,但你通常情況下,在測試中過多的常見部分並不是一個好主意,因爲當通用部分出現故障時,您將會有大量測試失敗,甚至可能導致軟件中只有一個小錯誤。

我建議您使用Factory或Builder來創建複雜對象,然後測試Factory(或Builder)以正確創建對象。