繁体   English   中英

什么是一个很好的模拟框架开始在asp.net MVC嘲笑? (新手,可能不是一个铁杆嘲弄者)

[英]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 MocksMoq作为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM