У меня есть unittest 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))
Который показывает, какой именно случай вызывает ошибку, но это код копирования и вставки, который, как я думал, обычно не рекомендуется. Я заметил проблему недавно, когда участник переработал более чистый юнит-тест, который, к сожалению, давал мало отладочной информации об ошибках утверждения. Итак, что лучше всего в этих случаях? Что-то вроде списка кортежей, передаваемых в цикл for с помощью assertEquals, «чище», но копирование-вставка с разными значениями в разных строках дает полезные трассировки стека.