当前位置:首页 > 全部子站 > IT > 水平考试

软件评测师:单元测试应该测什么,不应该测什么?

来源:长理培训发布时间:2017-11-26 11:07:20

 单元测试应该测什么,不应该测什么?

  这段代码描述电信营业系统中的缴费开机的过程:

  User user = User.getUserByServiceId("13309790280");//通过电话号码找到用户

  Account account = user.getAccount();//与用户关联的帐户

  user.pay(100);//用户缴费100元

  //判断用户余额+帐户的信用度-用户欠费是否大于0

  if (user.getBalance() + account.getCredit() - user.getDebt() > 0)

  {

  Service service = user.getService();//与用户相关的服务

  //判断这个服务是否处于欠费停机状态

  if (service.getState() == "欠费停机" || service.getState() == "限制呼出")

  {

  …//向交换系统发出开机指令

  }

  }

  这是电信营业系统中最常见的的一个业务。电信系统最基础的模型应该说是"三户模型",三户模型描述的是客户(Customer)、帐户(Account)、用户(User)以及服务(Service)等等概念的一个关系模型。实际的模型比代码里的复杂,这里简化了很多,主要用来举个例子。

  要开发一个电信系统,首先要做的就是在系统中实现最基础的几个模型,比如三户模型、联机指令模型、业务办理模型、合作伙伴模型……,其中三户模型处于非常重要的地位。首先要做的是在软件系统中真实的反映这个模型,绝不可以将其隐含扩散在各个业务过程中。然后就可以在这个基础上,从一到二、从二到三、从三到万,实现各个子系统和复杂多变的业务需求。

  按照TDD的开发思路,我们应该先写测试代码,再来写实际程序,用测试来推动开发的前进。这里先把代码写出来,表达一下业务。下面我就说一下,单元测试代码应该测什么。

  我们拿User举个例子,现在我们要写User类的测试代码。

  需要测什么?

  我们需要测试User类的外在表现。比如我们要测试pay方法,应该这样:

  我们建立一个User对象,这个User余额是0,欠费38元。现在缴费100元,缴费完成后,余额应该是62元,欠费应该为0,这是一个Case。

  我们建立一个User对象,这个User余额是30,欠费0。现在缴费50元,缴费完成后,欠费应该仍然是0,余额应该是80元。这是第二个Case。

  我们建立一个User对象,这个User的余额是0,欠费150元。现在缴费70元,缴费完成后,欠费应该是80元,余额应该是0。这是第三个Case。

  我们应该测试的是User类的外在表现,而不应该过问他如何实现。

  在测试的时候,我们需要一个可以重复的稳定的环境(真实环境往往不行),有时候无法直接建立 User对象(比如User对象要依赖一个数据集),有时候真实的环境很难实现一些测试条件(比如边界值、非正常值)。这时候,我们就可以使用Mock、 Stub这样的方法,把User建立起来,也把环境建立起来,然后测试User的表现。

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部