设为首页 收藏本站
查看: 653|回复: 0

[经验分享] Python的单元测试(二)

[复制链接]

尚未签到

发表于 2015-11-30 10:03:04 | 显示全部楼层 |阅读模式
  title: Python的单元测试(二)
  date: 2015-03-04 19:08:20
  categories: Python
  tags: [Python,单元测试]
  ---
  在Python的单元测试(一)中,我们讲了单元测试的概念以及一个简单的单元测试例子。
  在这个例子中,只有三个函数,于是可以把每个函数的输出结果打印到屏幕上,再用肉眼去看结果是否符合预期。然而假设有一个程序,有二十个类,每个类又有几十个函数,有些函数的输出结果还多达几十行,在这种情况下,肉眼如何看得出?
  当然你可以使用if判断
  

if 输出结果 == 预期结果:  return True
  
else:
  print u'不相等'
  

  这个时候,你发现,程序有几个函数,后三行就要重复几次,本着代码简洁的原则,你把这个判断的过程写到一个函数中:
  

def isequal(output,right_output):  if output == right_output:
  return True
  else:
  print u'不相等'
  

  那么恭喜你,你步入正规了,然而,这一切已经有人为你做好了。欢迎unittest模块出场。


  unittest supports test automation, sharing of setup and shutdown code for tests, aggregation of tests into collections, and independence of the tests from the reporting framework. The unittest module provides>
  Python的官方文档这样写到,unittest支持自动化测试,测试的安装分享和关闭代码……
  一句话说来,就是,unittest很好用。
  还是用上一次的readandadd.py来演示unittest的基本用法,首先介绍unittest的一个函数,assertEqual(first,second),这个函数的作用是检查变量first的值与second的值是否相等,如果不相等就抛出错误。
  先创建utest.py文件,输入以下代码并运行:
  

#-*-coding:utf-8-*-  
import unittest
  
import readandadd
  

  
class basictest(unittest.TestCase): #类名可以随便取
  def testread(self): #每个函数都要以test开头
  output = readandadd.read('1.txt')
  self.assertEqual(output,'2,3')
  

  def testgetnum(self):
  output = readandadd.getnum('2,3')
  self.assertEqual(output,['2', '3'])
  

  def testaddnum(self):
  output = readandadd.addnum([2,3])
  self.assertEqual(output,5)
  

  
if __name__ == '__main__':
  unittest.main()
  

  运行结果如下:
  

...  
----------------------------------------------------------------------
  
Ran 3 tests in 0.001s
  

  
OK
  

  你也许会说,就一个ok,什么都没有啊。那我先把testread()函数下面的
  

self.assertEqual(output,'2,3')  

  改为
  

self.assertEqual(output,'2,4')  

  在运行utest.py看看输出结果如何:
  

..F  
======================================================================
  
FAIL: testread (__main__.basictest)
  
----------------------------------------------------------------------
  
Traceback (most recent call last):
  File "E:/mystuff/unitest/utest.py", line 8, in testread
  self.assertEqual(output,'2,4')
  
AssertionError: '2,3' != '2,4'
  

  
----------------------------------------------------------------------
  
Ran 3 tests in 0.000s
  

  
FAILED (failures=1)
  

  这里准确的找出了错误的位置和错误的具体内容。注意看最上面,有个
  

..F  

  猜测它可能是标示错误的位置。保持testread的错误不改,再把testgetnum()函数中的以下内容
  

self.assertEqual(output,['2', '3'])  

  改为
  

self.assertEqual(output,['2', '6'])  

  再运行utest.py程序,输出结果如下:
  

.FF  
======================================================================
  
FAIL: testgetnum (__main__.basictest)
  
----------------------------------------------------------------------
  
Traceback (most recent call last):
  File "E:/mystuff/unitest/utest.py", line 12, in testgetnum
  self.assertEqual(output,['2', '6'])
  
AssertionError: Lists differ: ['2', '3'] != ['2', '6']
  

  
First differing element 1:
  
3
  
6
  

  
- ['2', '3']
  
?        ^
  

  
+ ['2', '6']
  
?        ^
  

  

  
======================================================================
  
FAIL: testread (__main__.basictest)
  
----------------------------------------------------------------------
  
Traceback (most recent call last):
  File "E:/mystuff/unitest/utest.py", line 8, in testread
  self.assertEqual(output,'2,4')
  
AssertionError: '2,3' != '2,4'
  

  
----------------------------------------------------------------------
  
Ran 3 tests in 0.001s
  

  
FAILED (failures=2)
  

  可以看出,这里分别把两个错误显示了出来。并且第一行变成了
  

.FF  

  所以,第一行的内容应该从右往左读,它标明错误函数在所有函数的相对位置。
  现在再把testread()和testgetnum()改回去,再看看全部正确的输出:
  

...  
----------------------------------------------------------------------
  
Ran 3 tests in 0.000s
  

  
OK
  

  印证了那句话,没有消息就是最好的消息。
  这篇文章介绍了单元测试模块unittest的assertEqual的基本用法,下一篇文章将要更加全面的介绍unittest模块。
  本文首发地址:http://kingname.info/2015/03/04/pythonunittest2/
  作者:青南
  转载请注明出处。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145243-1-1.html 上篇帖子: ubuntu14.04机器学习搭建——python、R、spark 下篇帖子: 【python游戏编程之旅】第一篇---初识pygame
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表