良好的产品代码才能单元测试
如果产品代码是下面那样,你就没办法测试了。 因为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