python单元测试unittest初体验

2019年11月1日 / 2次阅读 / Last Modified 2019年11月1日

为了提高驾驭更多代码的能力,非常有必要在编写代码的过程中,引入测试,特别是单元测试。这正好也是TDD(测试驱动开发)的思想。要修改一个被很多地方调用的函数,先写这个函数的单元测试,测试通过后修改函数,再重新测试,确保函数功能没有发生变化或异常。

python标准的unittest模块,可以很好的支持代码编写过程中随时都要用到的单元测试,支持TDD的落地。本文介绍简单实用unittest进行单元测试基本技巧。

假设有一个文件misc.py,里面有两个函数ehex和ebin,现在要给这两个函数编写单元测试用例。我们创建一个test.py文件,这个test.py文件中的代码如下:

import unittest
from misc import ehex, ebin


class Test(unittest.TestCase):

    def test_ehex(self):
        self.assertEqual(ehex(1), '0x01')
        self.assertEqual(ehex(123), '0x7B')
        self.assertEqual(ehex(255), '0xFF')
        self.assertEqual(ehex(567), '0x0237')
        self.assertEqual(ehex(5678), '0x162E')
        self.assertEqual(ehex(123456789), '0x075BCD15')
        with self.assertRaises(ValueError):
            ehex(-1)

    def test_ebin(self):
        self.assertEqual(ebin(1), '0b00000001')
        self.assertEqual(ebin(123), '0b01111011')
        self.assertEqual(ebin(255), '0b11111111')
        with self.assertRaises(ValueError):
            ebin(-1)
        self.assertRaises(ValueError, ebin, 256)


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

首先import unittest模块,然后引入要测试的函数。编写一个自己的类,继承自unittest.TestCase。然后开始写测试代码,每个测试成员函数,都必须以test_开头,否则unittest库就检测不到,就不能自动运行测试代码。self.assertEqual用来进行是否相等的判断,self.assertRaises用来进行是否有异常抛出的判断。这类assert*函数还有很多。

最后就是调用unittest.main()。运行单元测试的方法:

$ python3 test.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK
$ python3 test.py -v
test_ebin (__main__.Test) ... ok
test_ehex (__main__.Test) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

我喜欢加上-v参数,输入更详细一些。

以上就是unittest模块的基本实用框架,这个模块还有很多其它的assert*函数可以实用,用来进行更复杂的函数返回的判断,还有更多更丰富的功能。请参考python官方的详细介绍:https://docs.python.org/3/library/unittest.html

重要的基础函数,任何一代修改都很关键,如果有单元测试代码支撑,修改起来会更加有信心。

-- EOF --

本文链接:https://www.pynote.net/archives/1426

相关文章

    留言区

    电子邮件地址不会被公开。 必填项已用*标注


    前一篇:
    后一篇:

    More

    麦新杰的Python笔记

    Ctrl+D 收藏本页


    ©Copyright 麦新杰 Since 2019 Python笔记

    go to top