テストケースごとに最初のアサーションで失敗するのではなく、どのようにしてPythonのunittestモジュールにすべてのアサーションの出力を表示させることができますか? 最初の失敗だけでなく、失敗の完全なパターンを確認できれば、デバッグがはるかに簡単になります。
私の場合、アサーションは、オブジェクトといくつかの関数名と期待される出力 (以下を参照) を含む配列に対するいくつかのループに基づいているため、(少なくとも私にとっては) すべてのアサーションを単に分離する明確な方法はありません。別のテストケース:
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
これは、名前がtest_statenode.__getattribute__(test_state)()
変数に格納されているノードのメンバー関数を呼び出す私の方法です。