У меня есть тестовый модуль Python, в некоторых тестах проверяется объект одного типа. Основная схема в одном тестовом классе:
class TestClass(unittest.TestCase):
def setup(self):
...
def checkObjects(self, obj):
for i in [...values...]:
self.assertEqual(starttags(i,obj), endtags(i,obj))
def testOne(self):
#Get object one.
checkObjects(objone)
def testAnother(self):
#Access another object.
checkObjects(another)
... various tests for similar objects.
Несмотря на то, что он модульный, я заметил, что любые сбои приводят к ошибке, такой как AssertionError: number! = Anothernumber и строка кода, генерирующая ошибку, self.assertEqual(starttags(i,obj), endtags(i,obj))
. Если бы я перечислял тесты вместо того, чтобы помещать их в цикл for, у меня было бы что-то вроде:
self.assertEqual(starttags(value1,obj), endtags(value1,obj))
self.assertEqual(starttags(value2,obj), endtags(value2,obj))
Который точно указывает, в каком случае возникла ошибка, но представляет собой код копирования и вставки, который, как я думал, обычно не рекомендуется. Недавно я заметил проблему, когда участник переработал более clean unit-test, который, к сожалению, дал бы мало отладочной информации при сбое утверждения. Итак, какова лучшая практика в этих случаях? Что-то вроде списка кортежей, передаваемых в цикл for с помощью assertEquals, «чище», но копирование-вставка с различными значениями в разных строках дает полезные трассировки стека.