万能的官网,学习资源:
https://pythonguidecn.readthedocs.io/zh/latest/writing/tests.html
https://docs.python.org/3/library/math.html
https://docs.python.org/3/library/unittest.html
unittest基础知识要点:
https://www.jianshu.com/p/38948d0d73f5
https://www.jianshu.com/p/0b04cb0450ee
https://blog.csdn.net/xiaosongbk/article/details/52884837
目标:
学会用unittest测试python类
1.unittest概念
unittest支持测试自动化,在测试案例之间共享测试准备和测试清理代码,支持将测试案例分组聚合管理以及测试案例与报告框架独立。
unittest中有几个比较重要的概念:测试夹具(test fixture)、测试案例(test case)、测试套件(test suite)、测试运行器(test runner)、测试加载器(test loader)。
- 测试夹具:test fixture(测试前后的准备工作)
执行测试方法前所需要做的准备工作,以及测试方法完成后所有清理活动的统称。包括:创建临时数据库、数据库代理、文件目录或启动服务进程。
比如:setUp、TearDown等关键字。
setUp:用来进行测试准备工作。
setDown:用来进行测试清理工作。 - 测试案例:test case
一个测试案例就是一个独立的测试单元。它会检查被测对象在一系列特定的输入后,是否给出特定的响应。unittest提供了一个基类TestCase,这个类可以用来创建新的测试案例。 - 测试套件:test suite
测试套件是一些测试案例或者测试套件的集合,用来将一些需要一起执行的测试案例聚合在一起,以方便执行。 - 测试运行器:test runner
用来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。编排多个测试案例的执行并且给使用者提供执行后的输出。 - TestLoader
用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建他们的实例,然后add到TestSuite中,在返回一个TestSuite实例。
2.unittest实例
官网中的一个python-unittest实例:
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()
其中if name == 'main': unittest.main()
if __name__ == '__main__':
unittest.main()
条件判断语句需要特别说明一下:目的是为了从命令行测试案例提供支持,从命令行运行python,name变量会被赋值为main,此时调用unittest.main()方法,就会将上面TestStringMethods中定义的所有测试案例都执行一遍。
注意:
在pycharm中测试类定义的行,class TestStringMethods(unittest.TestCase)所在的行,点击右键,选择绿色三角菜单,即可以运行当前测试类中的所有测试案例。