Как я могу сделать так, чтобы модуль юнит-теста python отображал выходные данные для каждого утверждения, а не на первом в каждом тестовом случае? Отладка была бы намного легче, если бы я мог видеть полную схему сбоев, а не только первый.
В моем случае утверждения основаны на паре циклов над массивом, содержащим объект плюс некоторые имена функций и ожидаемый результат (см. Ниже), поэтому не существует очевидного способа (по крайней мере для меня) просто отделить каждое утверждение в отдельном TestCase:
import unittest
import get_nodes
class mytest2(unittest.TestCase):
def testfoo(self):
root = get_nodes.mmnode_plus.factory('mytree.xml')
tests = [
(root, {'skip_traversal': False, 'skip_as_child': True, 'skip_as_parent': False, 'is_leaf': False}),
(root[0], {'skip_traversal': False, 'skip_as_child': False, 'skip_as_parent': False, 'is_leaf': False}),
(root[1], {'skip_traversal': True, 'skip_as_child': True, 'skip_as_parent': True}),
(root[1][0], {'skip_traversal': True}),
(root[0][0], {'is_leaf': False, 'skip_traversal': False, 'skip_as_child': False, 'skip_as_parent': False}),
(root[0][0][0], {'is_leaf': True, 'skip_traversal': False, 'skip_as_child': False, 'skip_as_parent': True}),
(root[0][4], {'skip_traversal': True, 'skip_as_child': True, 'skip_as_parent': True}),
(root[0][7], {'skip_traversal': False, 'skip_as_child': False, 'skip_as_parent': True}),
]
for (node, states) in tests:
for test_state, exp_result in states.iteritems():
self.assertEqual(node.__getattribute__(test_state)(), exp_result, "unexpected %s for state %s of node %s %s" % (not exp_result, test_state, repr(node), repr(node.__dict__)))
unittest.main()
obj.__getattribute__('hello')
возвращает obj.hello
, поэтому node.__getattribute__(test_state)()
- мой способ вызова функции-члена узла, имя которого хранится в переменной test_state.