• Python单元测试标准库unittest简单学习


    1.背景

    当需要测试较为复杂的module,class或者系统的功能时,如果一个一个的去测试就会显得很麻烦,如果每项测试又有一定的配置或者设置的话,比如每个测试都要新建一个对象之类的,那就更麻烦了。单元测试的初衷就是使得这些测试自动化,高效率的完成。有人可能会说自己写个程序全部用assert来判断就可以了啊,然而,assert在raise一个exception之后就停止工作了,自己再从头构建一个测试系统当然也可以,但是标准库unittest已经完成了这项工作,有必要了解下,避免重复造轮子。

    2.单元测试中的几个重要的概念

    (1)test fixture

    test fixture是在进行单元测试前后所必须进行的操作,比如在每此测试前,创建数据库,新建文件,或者打开服务器;每次测试后的关闭文件,关闭服务器或者其他清理工作等。更直白的说,就是为单元测试顺利进行及结束所“营造”的一种环境。

    (2)test case

    test case是单元测试的最基本的要素,即单一场景被测试的正确与否,在单元测试中是以unittest.TestCase的实例来表现的,任何test cases必须是TestCase子类的实例。test case必须是自洽的(self contained),这样才能独立运行或者自由的跟其他test case组合在一起被测试。

    (3)test suite

    是test case,甚至与test suite的集合,用来进行一起有机的整体的测试。

    (4) test runner

    test runner 是一个可以有序的进行测试工作,然后把结果反馈给用户的组件,它可以是GUI,或者命令窗口式的,等等。

    3.基本操作

    以一个简单的例子来说明:

    import unittest
    
    class TestStringMethods(unittest.TestCase):
    
        def test_upper(self):
            self.assertEqual('foo'.upper(), 'FOO')
    
        def test_isupper(self):
            self.assertTrue('FOO'.isupper())
            self.assertFalse('Foo'.isupper())
    
        def test_split(self):
            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()
    

     先上一个小的单元测试代码片段(用来测试string类的方法),通过TestStringMethods类(是unittest.TestCase的子类)来创建一个test case,该类的3个方法均以 'test'开头,这个告诉了test runner 哪些方法要被测试。

    每个测试的关键是用assertEqual来核查预定结果,用assertTrue或者assertFalse来核查条件,用assertRaises来核查是否既定的exception被捕捉。

    之前说test fixture的概念,那么“营造”测试的环境的工作是谁来完成的呢?答案是 setUp() 和 tearDown(),如果每次的测试前都需要 dosomething(),那么就把 dosomething() 放在setUp()方法中,如果每次测试后都需要 doanotherthing(),那么就把 doanotherthing()放在 tearDown()下;需要注意的是如果 setUp()报错了,就不再测试了,如果setUp()没报错,tearDown()都会被执行,不论测试成功与否。

    4.启动方法

    值得一提的是,最好将测试代码与被测试代码分成不同的文件。在测试时,可以直接运行测试代码,或者通过命令的方法。

    python -m unittest test_module1 test_module2
    python -m unittest test_module.TestClass
    python -m unittest test_module.TestClass.test_method
    python -m unittest tests/test_something.py  
    python -m unittest -v test_module  #冗杂模式,即提供更多测试信息
    

    5.更多

    详见python 官方文档。

    ##### 愿你一寸一寸地攻城略地,一点一点地焕然一新 #####
  • 相关阅读:
    诚意租房网blog2
    3个微信小程序体验报告
    微信小程序正式上线 可置于聊天窗口顶部
    微信小程序开发工具测评
    死磕微信!支付宝版“小程序”曝光
    微信小程序开发—快速掌握组件及API的方法
    【微信小程序开发•系列文章六】生命周期和路由
    换个角度看微信小程序[推荐]
    微信小程序开发日记——高仿知乎日报(下)
    微信小程序开发日记——高仿知乎日报(中)
  • 原文地址:https://www.cnblogs.com/johnyang/p/13568413.html
Copyright © 2020-2023  润新知