关闭

单元测试之Stub和Mock

发表于:2014-2-08 11:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:肖佳    来源:51Testing软件测试网采编

  在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,记录Log, 文件系统 之类的)。 而我们没法控制这些外部依赖的对象。  为了解决这个问题,我们需要用到Stub和Mock来模拟这些外部依赖的对象,从而控制它们
  阅读目录
  实例
  设计测试用例
  什么是外部依赖
  Stub和Mock的相同处
  Stub和Mock的区别
  良好的产品代码才能单元测试
  Mock框架
  源代码下载
  实例
  Analyze类会检查filename的长度,如果小于8,我们就会使用一个实现IWebService的类来记录错误.
  我们需要给Analyze方法写单元测试。
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("From@test.com", "To@test.com", "IWebServiceFailed", e.Message);
}
}
}
}
  设计测试用例
  测试用例一:
  fileName= “c:\test\test.txt” (长度大于8),
  期待测试结果: 不会发邮件
  测试用例二:
  fileName=”c:\”,(长度小于8),  并且记log失败 。
  期待测试结果: 发邮件
  如果给Analyze方法写单元测试,为了实现测试用例二。  这时候我们就会碰到两个问题。
  第一: 我们无法控制让Service对象记log时抛出异常. 因为Serveice对象我们无法控制
  第二: 我们无法判断,Email对象是否发送了Email, (我们不能去Outlook查看收到邮件没有,这样就不是自动化了)
31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号