使用parameterized装饰器可以实现unittest参数化调用
import unittest
from parameterized import parameterized
class TestParameterized(unittest.TestCase):
@parameterized.expand(['test'])
def test_add(self, name):
print name
if __name__ == '__main__':
unittest.main(verbosity=1)
调用该case,添加到testsuite中(addTest(testadd.TestAdd('test_add'))),执行到该方法,会报错'NoneType' object is not callable。排查问题,报错原因主要是因为装饰器理解不够。
通过unittest.defaultTestLoader.discover()方法自动发现添加case,可以执行成功,因此将其自动发现的case打印出来。
discover = unittest.defaultTestLoader.discover(allcase, 'testadd.py', topLevel)
for suite in discover: # 使用for循环出suite,再循环出case
for case in suite:
print case
testunit.addTests(case)
return testunit
发现在带了parameterized装饰器的case的名称后面带着参数相关信息:'test_add_0_test',因此将这样的case添加的到testsuite中,正确的写法应该是addTest(testadd.TestAdd('test_add_0_test')
# -*- coding: utf-8 -*-
import unittest
import testadd
def create_suite(): # 产生测试套件
_suite = unittest.TestSuite()
_suite.addTest(testadd.TestAdd('test_add_0_test'))
return _suite