0
我已經閱讀了很多關於嘲笑的知識,特別是使用Rhino Mocks,並且瞭解到Rhino Mocks只能模擬具體類中的虛擬或虛擬方法的接口方法。我已經讀過,其原因是因爲Rhino mock無法攔截非虛擬方法,這是我卡住的地方。截取方法是什麼意思?截取方法實際上如何在嘲笑方面發揮作用(特別是犀牛嘲諷)什麼是嘲笑方法攔截?
我已經閱讀了很多關於嘲笑的知識,特別是使用Rhino Mocks,並且瞭解到Rhino Mocks只能模擬具體類中的虛擬或虛擬方法的接口方法。我已經讀過,其原因是因爲Rhino mock無法攔截非虛擬方法,這是我卡住的地方。截取方法是什麼意思?截取方法實際上如何在嘲笑方面發揮作用(特別是犀牛嘲諷)什麼是嘲笑方法攔截?
基本上這個想法是它創建了一個覆蓋任何虛擬或接口方法並將「模擬」代碼插入它們的「幕後」類。如果您有(根據您的評論的問題)
public EmailHelper
{
public virtual int SendEmail(MailMessage message)
{
var server = ConnectToServer();
int statusCode = server.SubmitEmail(message);
return statusCode;
}
}
,然後在測試(我忘了犀牛的這個語法,但是這是非常接近)
var mock = Mocks.CreateMockFor<EmailHelper>();
Expect.Call(mock.SendEmail).Return(5);
在幕後它將使用反射來加載SomeClass對象,搜索它的接口實現和虛擬方法以及gen中心提供全方位的一類像
public MockEmailHelper
{
public override int SendEmail(MailMessage message)
{
return 5;
}
}
所以你可以看到,當你調用SendEmail的模擬版本,它不會連接到服務器等,它只會做你告訴它,這樣你就可以測試你的代碼這取決於「電子郵件模塊」而不實際發送電子郵件。
所以嘲諷框架實際上調用了你的方法的實現。它是否真的執行它們?例如,如果我嘲笑電子郵件方法,它會發送電子郵件嗎? – Xaisoft 2010-09-14 16:58:51
不,這就是整個問題......所以你不依賴於外部系統。我將增加更多的幫助澄清,堅持.... – 2010-09-14 17:07:26
好的謝謝,我會等待你的澄清。 – Xaisoft 2010-09-14 17:13:30