2010-11-16 54 views
1

我有一個抽象類,它定義了一些方法。這個類有兩個子類。我應該在哪裏測試抽象類的方法?

我應該爲測試創建一個假子類,還是應該通過子類的測試來測試這些方法?通過子類測試看起來更自然,但是我必須在2個子類的測試之間複製測試代碼。

你們認爲什麼?

+0

http://stackoverflow.com/questions/104958/testing-abstract-class-concrete-methods的副本 – Mark 2010-11-16 20:24:18

+0

http://stackoverflow.com/questions/243274/best-practice-unit-testing-abstract的副本 - 班 – Mark 2010-11-16 20:24:34

回答

3

您不必複製測試代碼 - 您可以編寫測試方法,以便它們接受參數。

由於大多數測試框架不支持採用參數的測試,因此您可以添加一個小包裝,用特定實例調用您的參數化測試方法。現在,您可以輕鬆選擇是否有必要使用某個特定的基類來調用您的測試,或者對同一方法進行多次測試 - 對每個可能的基類進行一次測試。由於每次新測試只需要添加一個簡單的包裝器,所以代碼重複性很小。

void TestSomething(AbstractClass foo) 
{ 
    // Your test code goes here. 
    Assert.AreEqual(42, foo.Bar()); 
} 

[Test] 
void TestSomethingFoo1() 
{ 
    TestSomething(new Foo1()); 
} 

[Test] 
void TestSomethingFoo2() 
{ 
    TestSomething(new Foo2()); 
} 
1

我會去一個最小的假子類,將其與抽象類相關聯。我喜歡認爲無論發生在任何具體實例化中的情況如何,都可以正確地測試Abstract類。這確實假設Abstract類中的代碼是不平凡的,編寫假類並不是不合理的工作 - 我認爲這通常就是這種情況。

相關問題