您的位置:首页 > 编程语言 > Python开发

python unittest框架的使用&解析

2017-08-22 18:59 941 查看
学习unittest时,掉进一个坑,在官网上未找到解释,google了很多大牛的文章,才绕过去。也因为如此,才知道很多人已经对unittest做了详细而又深入的说明,需要的时候拿来看就好,我这个小渣渣还要不要写呢~~~

要写要写,自己写的东西以后翻看也一目了然。

————————我是分割线———————–

unittest也叫PyUnit,是Python版的Junit(Java),贴一个例子:

文件名:unit_learn.py

class DefaultTestCase(unittest.TestCase):

def setUp(self):
print "Start to run"

def tearDown(self):
print "Close"

class TestDefaultTestCase(DefaultTestCase):

def test_print_b(self):
print 'b'

def test_print_a(self):
print 'a'

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


运行结果:



测试用例是以“test”开头的方法。

unittest框架进行单元测试的过程:TestLoader类加载写好的测试用例(以”test”开头的方法)到一个测试套件中(TestLoader类加载完毕后返回所有的用例到一个testsuite),然后再调用unittest的runner执行测试用例

固件fixture

setUp()与tearDown()这两个方法是unittest.Testcase()类下的两个方法,前者可定义测试用例公用的东西,测试用例执行完后,可用tearDown()来进行剩下的公共的步骤。

测试用例testcase

以test开头的方法,即方法名的前缀有“test”,这个是TestLoader类中定义的,如下:

源代码loader.py

class TestLoader(object):
"""
This class is responsible for loading tests according to various criteria
and returning them wrapped in a TestSuite
"""
testMethodPrefix = 'test'
sortTestMethodsUsing = cmp
suiteClass = suite.TestSuite


上例中有两个测试用例:test_print_a()和test_print_b()

测试套件testsuite

上面例子中用unittest.main()方法就可以执行上面两个用例,是因为这个方法是以命令行的方法将模块转换成测试脚本并执行,main()方法也是使用unittest.TestLoader类来自动查找和加载模块内测试用例。TestLoader类生成的测试用例默认是以测试用例的名称来排序的。

也可以直接将测试用例直接写入测试套件中,也可以通过写入测试套件中的顺序来改变测试用例执行的顺序:

test_cases = [TestDefaultTestCase("test_print_b"), TestDefaultTestCase("test_print_a")]
test_suite.addTests(test_cases)


测试执行testrunner

run_cases = unittest.TextTestRunner()
run_cases.run(test_suite)


测试套件和测试执行要放在另外一个文件中,举例:

runtest.py

import unittest
from learn_unit import TestDefaultTestCase
if __name__ == '__main__':
suite = unittest.TestSuite()
test_cases = [TestDefaultTestCase("test_print_b"), TestDefaultTestCase("test_print_a")]
suite.addTests(test_cases)
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)


运行结果:



References

https://docs.python.org/2/library/unittest.html

http://pyunit.sourceforge.net/pyunit_cn.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python unittest