Moq步步惊心之第一步
我们在写Unit Test的时候是避免不了写Mock的。好的Mock库可以给我们极大的方便。在C++里我们有google mock库。在.NET里我们可以使用开源的Moq库。
你可以通过这个链接来访问Moq的官方网站: http://code.google.com/p/moq/wiki/QuickStart
这这篇文档里,我们将通过一个小的例子来学习如何使用Moq库。
public interface IFoo { string GetClientName(); void SetClientName(string strName); } class FooClient { public IFoo Foo { get; set; } public bool IsVIP() { return Foo.GetClientName().Equals("Bill Gates"); } public void RenameClient() { Foo.SetClientName("Bill Gates"); } }
在代码里我们有一个interface, IFoo,同时还有另外一个类, FooClient。FooClient通过调用IFoo的方法来获取 或者设置值。
在我们的Unit Test里,我们需要来test FooClient的两个方法。这个时候我们可以来Mock IFoo这个接口。
[TestMethod] public void TestMoqInstalledSuccessfully() { // // TODO: Add test logic here // Mock<IFoo> foo = new Mock<IFoo>(); foo.Setup(fw => fw.GetClientName()).Returns("Bill Gates"); FooClient fooClient = new FooClient(); fooClient.Foo = foo.Object; fooClient.IsVIP(); } [TestMethod] public void Test_SetClientName() { // // TODO: Add test logic here // Mock<IFoo> foo = new Mock<IFoo>(); FooClient fooClient = new FooClient(); fooClient.Foo = foo.Object; fooClient.RenameClient(); foo.Verify(fw => fw.SetClientName("Bill Gates")); }