[英]what is a good mocking framework to start mocking with in asp.net MVC? (novice and probably not a hardcore mocker)
我想在我的单元测试中使用模拟。
直到现在我更多编程'测试'而不是'单元测试',因为我测试了整个程序流程,但阅读讨论我可以不时看到模拟对象的美丽。
但是,环顾四周,有很多框架可用,我想确保我从一个好的框架开始,因为我想花时间学习一次模拟框架。
正如我在标题中所说的那样,我是嘲笑的新手,使用asp.net mvc,并且不认为我会成为一个嘲弄者,调查一个模拟框架的边缘。
为了让你了解我在IOC框架中喜欢什么,我喜欢统一和结构图。
米歇尔
我会推荐Moq 。 我之前尝试过Rhino,但我个人认为Moq API更加流畅。
我已经使用Rhino Mocks和Moq作为ASP.NET MVC项目的一部分取得了巨大的成功。 虽然过去这些框架有很大不同,但它们的功能集已经融合多年,因此任何一个都是不错的选择。
既然你专门针对MVC,你应该考虑Phil Haack也要说的话 。
我推荐Moq 。
假设你有一个MyClass
类定义如下:
public class MyClass{
private IMyDependency dependency;
public MyClass(IMyDependency dependency){
this.dependency = dependency;
}
public void DoSomething(){
//invoke a method on the dependency
this.dependency.DoWork();
}
}
IMyDependency
声明如下:
public interface IMyDependency{
void DoWork();
}
现在使用Moq,您可以测试依赖项是这样调用的:
public void DoSomethingWillInvokeDoWorkCorrectly()
{
var mock = new Mock<IMyDependency>();
mock.Setup(imd => imd.DoWork()).Verifiable();
var sut = new MyClass(mock.Object);
sut.DoSomething();
//Verify that the mock was called correctly
mock.Verify();
}
现在这是一个非常简单的例子,所以让我们稍微调整一下。
公共类MyClass2 {
private IMyDependency2 dependency;
public MyClass2(IMyDependency2 dependency){
this.dependency = dependency;
}
public void DoSomething(int i){
//invoke a method on the dependency
this.dependency.DoWork(i * 2);
}
}
IMyDependency2
声明如下:
public interface IMyDependency2{
void DoWork(int i);
}
测试将正确参数传递给依赖项的测试方法可能如下所示:
public void DoSomethingV2WillInvokeDoWorkCorrectly()
{
var mock = new Mock<IMyDependency2>();
int parameter = 60;
mock.Setup(imd => imd.DoWork(It.Is<int>(i => i == 2 * parameter)).Verifiable();
var sut = new MyClass2(mock.Object);
sut.DoSomething(parameter);
//Verify that the mock was called correctly
mock.Verify();
}
如您所见, Setup
方法现在为传递给DoWork
的参数添加一个约束,表示它是一个int,其值必须是parameter
变量值的两倍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.