2010-09-14 56 views
0

我已經閱讀了很多關於嘲笑的知識,特別是使用Rhino Mocks,並且瞭解到Rhino Mocks只能模擬具體類中的虛擬或虛擬方法的接口方法。我已經讀過,其原因是因爲Rhino mock無法攔截非虛擬方法,這是我卡住的地方。截取方法是什麼意思?截取方法實際上如何在嘲笑方面發揮作用(特別是犀牛嘲諷)什麼是嘲笑方法攔截?

回答

1

基本上這個想法是它創建了一個覆蓋任何虛擬或接口方法並將「模擬」代碼插入它們的「幕後」類。如果您有(根據您的評論的問題)

高度簡化的例子/概述

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的模擬版本,它不會連接到服務器等,它只會做你告訴它,這樣你就可以測試你的代碼這取決於「電子郵件模塊」而不實際發送電子郵件。

+0

所以嘲諷框架實際上調用了你的方法的實現。它是否真的執行它們?例如,如果我嘲笑電子郵件方法,它會發送電子郵件嗎? – Xaisoft 2010-09-14 16:58:51

+0

不,這就是整個問題......所以你不依賴於外部系統。我將增加更多的幫助澄清,堅持.... – 2010-09-14 17:07:26

+0

好的謝謝,我會等待你的澄清。 – Xaisoft 2010-09-14 17:13:30