【C#】【xUnit】【Moq】.NET单元测试Mock框架Moq初探!

在TDD开发模型中,经常是在编码的同时进行单元测试的编写,由于现代软件开发不可能是一个人完成的工作,所以在定义好接口的时候我们就可以进行自己功能的开发(接口不能经常变更),而我们调用他人的功能时只需要使用接口即可。
但我们在编写自己的单元测试并进行功能验证的时候,如果接口的实现人还没有完成代码怎么办呢?一般我们可能会自己写一个模拟实现来进行单元测试,这就是我们经常所说的单元测试中的Stub和Mock(关于单元测试的Stub和Mock,可以自己度娘一下,也可以参考https://www.cnblogs.com/TankXiao/archive/2012/03/06/2366073.html, 本文的部分代码来自于这篇博客)。在.net环境中可以使用的Mock框架是Moq,目前版本4.10。
我们使用NuGet安装依赖的库xUnit,Moq等。
我们定义两个接口:

    public interface IWebService
    {
        void LogError(string msg);
    }

    public interface IEmailService
    {
        void SendEmail(string a, string b, string c, string d);
    }

一个类:

    public class LogAnalyzer
    {
        private IWebService service;
        private IEmailService email;

        public IWebService Service
        {
            get { return service; }
            set { service = value; }
        }

        public IEmailService Email
        {
            get { return email; }
            set { email = value; }
        }

        public void Analyze(string fileName)
        {
            if (fileName.Length < 8)
            {
                try
                {
                    service.LogError("the file name is to short" + fileName);
                }
                catch (Exception e)
                {
                    email.SendEmail("[email protected]", "[email protected]", "IWebServiceFailed", e.Message);
                }
            }
        }
    }

我们要进行这个类的测试,其中两个接口的实现是别人来做。我在自己的单元测试中不想去引用他人的实现,也不想自己写Mock,所以使用框架Moq来创建我想要的对象。

原文链接

猜你喜欢

转载自blog.csdn.net/weixin_40581617/article/details/84650980