为了减少锅炉板代码,我想到了在类Tester中为所有无参数方法生成测试用例的想法。如何自动生成无参数方法的测试用例?
在运行py.test,它只能识别使用setattr(Tester,'test_' + name, member)
也许py.test已经检查了类测试仪的静态书面测试用例(test_a,test_b),但不是动态创建测试用例在调用setUpClass之前调用'test_ *'的方法?任何提示如何让这个运行?
import inspect
import unittest
class Testee:
def a(self):
print('a')
def b(self):
print('b')
#...
#...
def z(self):
print('z')
class Tester(unittest.TestCase):
@classmethod
def setUpClass(cls):
testee = Testee()
for name, member in inspect.getmembers(object=testee, predicate=inspect.ismethod or inspect.iscoroutine):
if len(inspect.signature(member).parameters):
print(str(inspect.signature(member).parameters))
setattr(Tester,'test_' + name, member)
if inspect.isfunction(member) or inspect.ismethod(member):
setattr(Tester,'test_' + name, member)
elif inspect.iscoroutinefunction(member):
setattr(Tester,'test_' + name, functools.partialmethod(TestInstrument.run_coro, member))
else:
print(member)
return super().setUpClass()
def test_a(self):
Tester.testee.a()
def test_b(self):
Tester.testee.b()
=============================测试环节开始========= ==================== platform win32 - Python 3.5.1,pytest-2.9.2,py-1.4.31,pluggy-0.3.1 - c: \程序 文件\ python35 \ python.exe cachedir:.cache ROOTDIR:C:\测试,ini文件: 收集2项
sandbox.py::Tester::test_a PASSED sandbox.py::Tester::test_b PASSED
========================== 2秒0.03秒============== =============
EDIT:如果我移动代码setupClass到全球范围内(在类外),然后py.test检测并运行自动生成测试用例。
你可以请张贴你实例化测试类的地方吗?此外,请在您的setattr中使用'cls'而不是'Tester'。 –
@Vincenzzzochi py.test为我做的瞬间。 – goldcode