Rhino Mocks存根和mock只適用於接口而不是具體的類是否正確?我花了很長時間試圖讓這段代碼工作。我沒有想到,存根的pubSubClient總是從類中調用Send方法。該方法有一些依賴關係並拋出異常。犀牛嘲笑存根和嘲笑只適用於接口?
[Test]
public void Test01()
{
PubSubMessage psm = new PubSubMessage();
var pubSubClient = MockRepository.GenerateStub<PubSubClient>();
pubSubClient.Stub(x => x.Send(psm)).IgnoreArguments().Return(null);
// actual PubSubClient Send method throws exception
// the rest of the test is skipped...
}
但是,當我提取接口並使用IPubSubClient運行相同的測試時,它似乎按預期工作。
這是否意味着我必須爲每個我想用犀牛模擬/存根的類提取界面?或者我缺少技術或概念上的東西?
UPDATE:OK,我似乎想通了什麼部分我失蹤: 犀牛嘲笑無法攔截到非虛方法電話。所以,我想我要麼使用接口,要麼讓具體類的每個方法都是虛擬的。如果有其他選擇,請糾正我。
如果你聲明部分模擬不適合某些事情,那麼在你的回答中說出它們的含義會更有幫助。部分模擬僅用於模擬某個類的一部分,這使得它們很方便(並且需要)模擬出一個普通模擬無法處理的抽象類。這允許抽象方法的測試。部分模擬(至少在Rhino中)將嘲笑任何類,並且不限於抽象類,但請注意,是否存在將在返回時調用的實現代碼。 – 2010-09-27 11:28:37
(necro警報):我剛發現你的班級甚至不需要抽象以使方法變爲虛擬!這麼小的事情,但我從來沒有考慮過它:-) – Heliac 2014-10-03 07:24:39