单元测试之Stub和Mock(2)

发表于:2015-09-21来源:uml.org.cn作者:不详点击数: 标签:单元测试
良好的产品代码才能单元测试 如果产品代码是下面那样,你就没办法测试了。 因为WebService和EmailService两个类没有继承接口。我们无法把StubWebService和Moc

  良好的产品代码才能单元测试

  如果产品代码是下面那样,你就没办法测试了。 因为WebService和EmailService两个类没有继承接口。我们无法把StubWebService和MockEmailService两个类注入到产品代码。

public class LogAnalyzer
    {
        private WebService webService;
        private EmailService emailService;

        public WebService WebService
        {
            get { return webService; }
            set { webService = value; }
        }

        public EmailService Emailservice
        {
            get { return emailService; }
            set { emailService = value; }
        }

        public void Analyze(string fileName)
        {
            if (fileName.Length < 8)
            {
                try
                {
                    WebService.LogError("Filename too short:" + fileName);
                }
                catch (Exception e)
                {
                    Emailservice.SendEmail("to@test.com", "from@test.com", "WebSerive log error", e.Message);
                }
            }
        }
    }

  Mock框架

  其实我们没有必要自己写MockEmailService方法。 已经有现成的Mock框架可以用了, .NET中有Rhino Mock 和 Moq, 这两个框架比较好用

  点击此处下载完整的源代码 , 请用VS2008打开

  [参考] The Art of Unit Testing

原文转自:http://www.uml.org.cn/Test/201210171.asp