Мои модульные тесты сложны, и их нелегко (или невозможно) программировать вручную вручную.Было бы полезно иметь возможность динамически добавлять тестовые данные и, для удобства чтения, иметь собственный метод тестирования для каждого из них, предпочтительно путем генерации тестовых методов на лету.
Вот (нерабочий) пример:
class TestParam(unittest.TestCase):
def __init__(self, _):
dir = 'test_param_items'
for f in os.listdir(dir):
if os.path.isfile(dir + "\\" + f) and f[0] != '_':
print f
func = self.TestCaseFactory(f, dir)
setattr(TestParam, func.__name__, func)
super(TestParam, self).__init__(func.__name__)
def TestCaseFactory(self, inFileName, inDir):
def func(inObj):
print inFileName
with open(inDir + "\\" + inFileName, "r") as testFile:
testNode = testFile.read()
par = Param(inETree=etree.XML(testNode))
self.assertEqual(testNode, etree.tostring(par.eTree))
func.__name__ = "test_" + inFileName[:-4]
return func
И тестовые файлы здесь представляют собой обычные XML-файлы.Но исполнитель тестов Python 2.7 берет методы тестирования из класса, а не из экземпляра, и запускает их по экземпляру:
loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames))
, поэтому я не могу запустить сгенерированные тестовые функции.Моя ошибка, очевидно, в том, что обычно тестовый метод охватывает много тестовых случаев, но я думаю, что написание 10 или 100 этих методов занимает очень много времени.И было бы довольно грязно иметь кучу тестов для каждого метода, и когда тест (метод) не может найти фактический вывод метода AssertEquals с огромными данными.И я бы нашел подход
def testMethod1(self):
load('testFile1')
def testMethod2(self):
load('testFile2')
и т. Д.довольно много разложено (данные испытаний и методы испытаний разделены на разные файлы).
Есть идеи по этому поводу?Мой подход неверен?Есть ли возможность сделать это?
Есть идеи такого подхода?