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