设计测试用例
  测试用例一:
  fileName= “c: est est.txt” (长度大于8),
  期待测试结果: 不会发邮件
  测试用例二:
  fileName=”c:”,(长度小于8),  并且记log失败 。
  期待测试结果: 发邮件
  如果给Analyze方法写单元测试,为了实现测试用例二。  这时候我们会碰到两个问题。
  第一: 我们无法控制让Service对象记log时抛出异常. 因为Serveice对象我们无法控制
  第二: 我们无法判断,Email对象是否发送了Email, (我们不能去Outlook查看收到邮件没有,这样不是自动化了)

  外部依赖对象
  对于LogAnalyzer对象来说, Service和Email是两个外部依赖对象. 我们需要自己写Stub和Mock来模拟这两个外部依赖对象。这样我们才能控制他们。
  我们在测试的代码中新建StubWebService和MockEmailService.这两个class分别实现了IWebService和IEmailService.

 

public class StubWebService : IWebService
{
public void LogError(string message)
{
throw new Exception("StubWebService throw exception");
}
}
public class MockEmailService : IEmailService
{
public string To;
public string From;
public string Subject;
public string Message;
public void SendEmail(string to, string from, string subject, string message)
{
To = to;
From = from;
Subject = subject;
Message = message;
}
}