我有一個抽象類,它定義了一些方法。這個類有兩個子類。我應該在哪裏測試抽象類的方法?
我應該爲測試創建一個假子類,還是應該通過子類的測試來測試這些方法?通過子類測試看起來更自然,但是我必須在2個子類的測試之間複製測試代碼。
你們認爲什麼?
我有一個抽象類,它定義了一些方法。這個類有兩個子類。我應該在哪裏測試抽象類的方法?
我應該爲測試創建一個假子類,還是應該通過子類的測試來測試這些方法?通過子類測試看起來更自然,但是我必須在2個子類的測試之間複製測試代碼。
你們認爲什麼?
您不必複製測試代碼 - 您可以編寫測試方法,以便它們接受參數。
由於大多數測試框架不支持採用參數的測試,因此您可以添加一個小包裝,用特定實例調用您的參數化測試方法。現在,您可以輕鬆選擇是否有必要使用某個特定的基類來調用您的測試,或者對同一方法進行多次測試 - 對每個可能的基類進行一次測試。由於每次新測試只需要添加一個簡單的包裝器,所以代碼重複性很小。
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());
}
我會去一個最小的假子類,將其與抽象類相關聯。我喜歡認爲無論發生在任何具體實例化中的情況如何,都可以正確地測試Abstract類。這確實假設Abstract類中的代碼是不平凡的,編寫假類並不是不合理的工作 - 我認爲這通常就是這種情況。
http://stackoverflow.com/questions/104958/testing-abstract-class-concrete-methods的副本 – Mark 2010-11-16 20:24:18
http://stackoverflow.com/questions/243274/best-practice-unit-testing-abstract的副本 - 班 – Mark 2010-11-16 20:24:34