2010-06-16 59 views
3

據我所知,RM應該模擬任何可以被派生類訪問的東西。由於受保護的虛擬成員可以從子類訪問,它不應該是可嘲弄的嗎?RhinoMocks - 嘲弄受保護的虛擬成員

我的理解是,RM不支持模擬受保護的虛擬成員。

回答

1

據我所知,RM應該模擬 任何可以被 派生類訪問的東西。

不是。這個想法是,你應該能夠嘲笑被測試類的依賴關係的行爲。 依賴關係這裏使用的意義與dependency injection中的意義相同。

在測試驅動開發中,一個通常是favors composition over inheritance。依賴關係通常隱藏在接口後面。

我的理解是,RM不支持 支持嘲諷保護虛擬 成員。

這是正確的。有兩種簡潔和類型安全的方式來指定您在設置行爲時所討論的類成員:通過以記錄方式或使用lambda表達式調用成員。 Rhino Mocks支持兩者,但都不能用於受保護的成員。

+0

讓我重新修改我的第一句話:「在內部,RM創建一個模擬類,將測試類(或接口)劃分爲子類」。如果這是真的,我的問題是因爲受保護的成員可以通過子類訪問,爲什麼RM不能嘲笑該成員。 – 2010-06-17 02:04:17

+0

@Dave:因爲在單元測試中沒有簡潔和類型安全的方式來引用這些成員。編譯器不允許在記錄模式下調用受保護的成員。編譯器不允許在lambda表達式中使用受保護的成員。字符串不是類型安全的。因此,沒有好的方法來爲這些方法建立行爲。 – 2010-06-17 02:08:04

2

如果我想模擬一個受保護的成員,我通常會跳過Rhino Mocks,只是用我自己的假實現進行子類化。

+0

感嘆,這就是我爲了模仿Microsoft WebApi Ok()保護的虛擬方法所必須做的。 >。< – 2014-07-03 18:54:09

+0

@Alex如果您仍然需要手動創建假貨,那麼這種類型的目的就是製造一個模擬框架。 – Ash 2017-08-29 22:03:02