码迷,mamicode.com
首页 > 其他好文 > 详细

单元测试unittest 1 基本概念

时间:2020-02-09 18:47:27      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:typeerror   imp   启动   pytho   简单的   组合   runner   adt   数据驱动   

基本概念

unittest是python自带的单元测试框架,有时候被称为"PyUnit",是python版本的JUint实现。

在学习使用unittest库之前,我们需要了解一下unittest库的一些重要概念:

  • test fixture:
    代表了用例执行前的准备工作和用例执行之后的清理工作。比如在用例执行前创建临时文件和文件夹,又或者启动1个server进程等;

  • test case:
    测试用例,这个相信大家都不陌生。是测试的最小单位,一般检查一组输入的响应(输出)是否符合预期。unittest模块提供了TestCase类来帮助我们创建测试用例;

  • test suite:
    经常被翻译成"测试套件",也有人称为"测试套",是测试用例或测试套件的集合,一般用来把需要一起执行的用例组合到一起;

  • test runner:
    用来执行测试用例并输出测试结果的组件。可以是图形界面或命令行界面;

总之test fixture的功能可以理解成是初始化和清理测试数据及环境。test case是测试用例。test suite是用例集合。test runner的作用是运行用例并返回结果。

补充,要实现更强大的功能还需要其他组件,有测试套件装入组件,参数化组件,数据驱动组件,结果报告组件等。

基本用法举例

我们通过最简单的例子来看一下unittest的基本用法,下面的代码测试了3个python字符串方法,基本上满足了大部分情况下的测试需求。

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()

解释

可以通过继承unittest.TestCase类来定义我们自己的测试用例类,1个测试用例类下面可以有多个测试方法(test)或者叫做测试点。

记住这个套路:测试用例中方法名以test开头的方法才是测试方法,比如上面的例子里定义了3个以test开头的方法,分别是test_upper,test_isupper和test_split。非测试方法是不会被test runner执行的

断言是测试用例的核心。我们使用assertEqual()来判断预期结果,用assertTrue()和assertFalse()来做是非判断,以及用assertRaises()来判断预期的异常是否有被抛出。这些unittest提供的以assert开头的方法就是断言,一般情况下,每个测试方法里都必须有断言

最后, unittest.main()提供了最简单的执行测试用例的方式。当我们从命令行运行上面的代码时,我们可以看到如下的输出

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

OK

除了使用unittest.main,还有其他的方式可以运行测试用例,比如把最后2行替换为

suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
unittest.TextTestRunner(verbosity=2).run(suite)
运行用例,结果将会如下所示

test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok

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

OK

单元测试unittest 1 基本概念

标签:typeerror   imp   启动   pytho   简单的   组合   runner   adt   数据驱动   

原文地址:https://www.cnblogs.com/candyYang/p/12287921.html

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