我读了很多关于mocking的文章,特别是使用Rhino mock,并且了解到Rhino mock只能模拟接口方法,这些方法是具体类中的虚方法或虚方法。我读到这是因为Rhino mock不能拦截非虚拟方法,这就是我被困住的地方。截取方法是什么意思?截取方法实际上是如何处理模拟的(特别是Rhino Mock)
发布于 2010-09-15 00:45:04
基本上,它的想法是创建一个“幕后”类,覆盖任何虚拟或接口方法,并在其中插入“模拟”代码。
高度简化的示例/概述
如果你有(基于你的评论问题)
public EmailHelper
{
public virtual int SendEmail( MailMessage message)
{
var server = ConnectToServer();
int statusCode = server.SubmitEmail( message );
return statusCode;
}
}然后在一个测试中(我忘记了Rhino的语法,但这已经足够接近了)
var mock = Mocks.CreateMockFor<EmailHelper>();
Expect.Call(mock.SendEmail).Return(5);在幕后,它将使用反射加载SomeClass Type对象,在其中搜索接口实现和虚拟方法,并生成类似如下的类
public MockEmailHelper
{
public override int SendEmail( MailMessage message )
{
return 5;
}
}正如你所看到的,当你调用SendEmail的模拟版本时,它不会连接到服务器等,它只会做你告诉它做的事情,所以你可以测试依赖于‘电子邮件模块’的代码,而不是实际发送电子邮件。
https://stackoverflow.com/questions/3710983
复制相似问题