2011-09-17 89 views
13

單元測試子類的最佳方法是什麼?假設有一個我已經寫過測試的基類,並且有一些子類覆蓋了父類在公共方法和/或受保護方法中的一些行爲。如何進行單元測試子類

我的子類的測試類是否應該擴展(並在合適的地方覆蓋測試方法)我的基類的測試類,以便應用所有基類測試?否則,我希望有重複的測試代碼。

回答

9

根據Liskov substitution principle,子類的實例應展示與基類相同的屬性,並因此傳遞(全部?)相同的單元測試。

我會運行[也許不是全部,所有相關的]基類測試每個子類。這可以通過test helper來實現。

是的,子類化測試類可能是避免單元測試中重複的好方法。看看Testcase superclass模式。

+0

您對Liskov替代原理如何適用的斷言是不正確的。子類的方法不必通過所有基本的單元測試,否則它們在行爲上會完全相同。在這種情況下,重寫基本方法有什麼意義? –

+5

Liskov原理的原始發佈是正確的。子類應該通過超類的所有單元測試,*和更多*。額外的測試反映了子類的附加功能。當然,你可以用違反Liskov的方式重寫一個方法,在這種情況下,相關的單元測試將會失敗。 – ComDubh

6

沒有示例就很難看出來,但我會在一組測試中測試基類,然後爲子類創建新測試,並測試不同的行爲。