假如我们有这样一个控制器里面有这样一个方法,如图
我们在对Bar测试得时候,如果测试未通过,错误有可能来至于Bar,也有可能错误来至于serverde Foo方法。
这样就会干扰我们对于Bar的测试,因为我们只想测试Bar是否有问题。那我们就可以使用模拟测试,模拟server.
在NuGet里搜索并安装Moq包。
安装后编写单元测试代码
using Xunit; using Moq; public void MoqTest() { Controller controller=new Controller();
var mo = new Mock<IServer>(); mo.Setup(foo => foo.Foo())
.Returns("ok"); Assert.Equal("ok", controller.Bar(mo.Object)); }
创建一个对象
var mo=new Mock<Iserver>();
设置方法放回值
mo.Setup(foo=>foo.Foo())
.Returns("ok");
测试结果如果
IServer:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyFirstUnitTests { public interface IServer { string Foo(); } }
Server:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyFirstUnitTests { public class Server:IServer { public string Foo() { return "test"; } } }
Controller:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyFirstUnitTests { public class Controller { public string Bar(IServer server) { var res = server.Foo(); return res; } } }
PS:呵呵,这是一篇水文
O(∩_∩)O哈哈~
原文:http://www.cnblogs.com/c-o-d-e/p/4940025.html