簡體   English   中英

如何對抽象類的虛擬方法進行單元測試?

[英]How to unit test a virtual method on an abstract class?

我有一個C#抽象類,該類在虛擬方法中具有行為。 我需要對該虛擬方法中的行為進行單元測試(沒有問題:何時調用該方法)。 我看到三個選擇:

1)創建抽象類的虛擬實現
2)使用子代調用虛擬方法(每個子代實現重復測試)
3)這里有人指出的另一種選擇

我傾向於#1。 這是測試此行為的最明智的方法嗎?

理想情況下,您只想測試該類 ,因此創建一個虛擬實現。 如果您使用的是支持模擬類的模擬框架,那可能是最簡單的方法。 如果您的虛擬方法調用了抽象類中定義的抽象(或虛擬)方法,則模擬框架將允許您驗證發生了這些調用。 (另一方面,如果您對結果比對測試抽象類及其子類之間的確切協議更感興趣,則可能希望使用模擬框架來創建存根 。)

我個人總是為每個子實現創建重復的測試。 這樣,如果有人來覆蓋子類中的方法,您將中斷測試並知道需要重寫它們。 只需一點額外的覆蓋。

最終,您應該質疑為什么基類需要實現新的默認實現。 也許您應該委派? 為什么要修改影響所有班級的行為?

但是如果您必須修改所有孩子都應該繼承的行為...

組合1和2。使用假人作為對照測試。

然后,至少使用該行為的一種實際用法進行測試,以確保該行為與實際情況相符。

編寫孩子的開發人員應對他們的行為負責。

最終,應該有人確保發布前它可以與所有現有子級一起使用,因此您不會損壞那些子級,但是如果您已證明基類實現是有效的,則所有更改都應該來自擴展基類的那些對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM