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"));
        }

 

posted @ 2011-10-31 14:55  relianceslee  阅读(624)  评论(0编辑  收藏  举报