关闭

使用Microsoft Fakes进行单元测试(1)

发表于:2016-2-01 09:33

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

 作者:Agile.Zhou(kklldog)    来源:51Testing软件测试网采编

  一:什么是单元测试
  单元测试是对软件进行准确性验证的步骤。单元测试并不进行整个软件功能的测试,仅仅是对于最小工作单元的测试。一般最小工作单元就是指方法/函数等。
  这里并不打算对单元测试的概念及基础进行更多的介绍,需要了解更多的自行google。
  二:UnitTestFramework
  UnitTestFramework是微软开发的一套单元测试框架。类似的三方框架有NUnit等。UnitTestFramework为单元测试提供断言,自动化测试,管理界面等功能。与VisualStudio无缝集成。
  三:Microsoft Fakes
  Microsoft Fakes是UnitTestFramework下的高级组件。Microsoft Fakes可以帮我们隔离测试的代码。我们的代码/方法很多时候并不是完全独立的。一个方法会受到传入的参数的影响,一个方法也可能去调用另外一个方法才能正确的执行。所以当我们想要对一个方法进行单元测试的时候,如果有其他因素影响,那么我们很难确定这个方法失败错误的真实原因。所以我们进行单元测试的时候就要想办法消除这些影响。这个时候我们可以用Microsoft Fakes。Microsoft Fakes可以用来模拟接口,静态方法等,通过Microsoft Fakes模拟的方法,具有稳定的,可以预期的返回值,这个时候我们就可以认为消除了外部模块对单元测试的影响。
  注意:Microsoft Fakes并不是所有版本的VisualStudio都支持,通常只有高级版本才包含。比如VisualStudio2015只有Enterprice版本才支持。
  Microsoft Fakes主要有2大功能:
  stub:
  一个stub可以用来替换一个实现了某个接口的class。简单的说stub可以用来快速的实现一个接口,用来测试。使用stub来测试,你的程序必须是面向接口设计的。
  shim:
  一个shim可以用来替换一个你已经编译完成的库中的某个方法,当你的测试运行的时候,调用的是shim模拟的方法。shim可以用来模拟那些你无法修改的程序集的方法,比如.NET内置类库。
  四:示例
  1.使用Stub来模拟接口
  使用VisualStudio新建一个项目叫做MSFakeSample:
  我们想象这样一个业务需求。我们需要把所有学生的名称组合成一个用逗号分隔的字符串。所有的学生信息存放在数据库里。
  IStudentsRepository
  这个接口描述的是Students仓储类需要实现的功能。
  StudentsService
  这类是用来实现Students的业务逻辑。
  按照正常的开发逻辑,我们这个时候还需要去实现IStudentsRepository这个接口,也许是封装EF,也许是封装Dapper等等,然后才能去测试ConnectNames这个方法。但是尽管用EF等去实现了IStudentsRepository接口,我们的测试方法严重依赖了仓储层,数据库。也许为了测试我们还需要配置数据库连接,添加模拟数据到数据库。任何IStudentsRepository实现类的变化,或者数据库的变化,都可能影响到单元测试的结果。如果我们可以隔离这些变化那么我们的单元测试将变得非常完美。
  有了Microsoft Fakes我们可以模拟一个实现了IStudentsRepository的类,来完全的隔离IStudentsRepository实现类的变化,或者数据库的变化。
  创建单元测试类
  在ConnectNames方法上右击,点击创建单元测试
  在弹出的创建单元测试对话框上点击确定,程序就会自动创建一个以当前项目名称+Tests的项目,并且为你生成一个测试类StudentsServiceTests。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号