Модульность Python Unittest против удобочитаемости

У меня есть 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, «чище», но копирование-вставка с разными значениями в разных строках дает полезные трассировки стека.

7
задан NoBugs 14 February 2012 в 04:58
поделиться