码迷,mamicode.com
首页 > 编程语言 > 详细

Python unittest模块心得

时间:2018-01-16 14:06:49      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:分享图片   world   bubuko   针对   用例   用户   runner   post   lib   

关于unittest模块的一些心得,主要是看官网的例子,加上一点自己的理解,官网地址:https://docs.python.org/3.6/library/unittest.html

unittest模块是Python的单元测试框架,支持自动化测试,所有用例共享setUp和tearDown代码,可以将测试用例聚合成测试集合,测试用例与报告框架独立。

为了实现这些功能,unittest支持下面几个面向对象式的概念:

  1. test fixture:代表了执行一个或多个测试用例所需要的准备工作,以及所有相关的清除工作。比如创建临时的或者代理的数据库,文件夹或者启动服务器。
  2. test case: 代表了一个单独的单元测试用例,会检查输入参数对应的反馈。unittest提供了一个基类TestCase用来创建测试用例。
  3. test suite: 代表了测试用例及测试套件的集合,用来将测试用例聚合到一起去执行。
  4. test runner: 用来执行测试用例并将测试结果反馈给用户。可以用图形接口,文字接口或者返回一些指定值来指示测试结果。
  5. test report: 可以使用unittest自带的TextTestRunner(),也可以使用HTMLTestRunner()产生HTML格式的测试报告,现在用BSTestRunner()代替HTMLTestRunner()

这些概念间的关系见下图:

技术分享图片

下面给一些例子和说明:

import unittest

class TestStringMethods(unittest.TestCase):###编写的测试类要继承unittest.TestCase,类名称要以test开头,后面讲原因。

    def setUp(self):###所有用例共用的setup,在用例执行前先执行,用来搭建环境。
        print(case setup)

    def tearDown(self):###所有用例共用的tearDown,在用例执行结束后执行,用来清理环境。setUp和tearDown保证了每个test case都是独立的,不依赖与其他case.
        print(case teardown\n)

    def test_upper(self):###测试用例1,需要以test开头,原因后面讲。
        print(case test_upper)
        self.assertEqual(foo.upper(), FOO)###assertEqual(a,b)如果a==b则用例pass,否则fail.

    def test_isupper(self):###测试用例2,需要以test开头。
        print(case test_isupper)
        self.assertTrue(FOO.isupper())###类似的assert用法
        self.assertFalse(Foo.isupper())

    def test_split(self):###测试用例3
        print(case test_split)
        s = hello world
        self.assertEqual(s.split(), [hello, world])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == __main__:
    unittest.main()###具体做了哪些工作后面会详细讲。

下面看一下case的运行结果:

case setup
case test_isupper
case teardown

case setup
case test_split
case teardown

case setup
case test_upper
case teardown

###三个case全部pass,因为assert里面的结果都正确。这里并没有体现出测试结果,只是将打印信息展示出来。我们可以看到针对每个test_的case都运行了一边,
每次都独立的调用了setUp和tearDown.case执行的顺序不是按照代码的顺序,而是按照case名称字母的顺序执行,这个是unittest.main()函数决定的。

Python unittest模块心得

标签:分享图片   world   bubuko   针对   用例   用户   runner   post   lib   

原文地址:https://www.cnblogs.com/frost-hit/p/8295818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!