如何使 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
所以 node.__getattribute__(test_state)()
是我的调用方式名称存储在 test_state 变量中的节点的成员函数。
最佳答案
import unittest
import get_nodes
class TestSuper(unittest.TestCase):
def setUp( self ):
self.root = get_nodes.mmnode_plus.factory('mytree.xml')
def condition( self, aNode, skip_traversal, skip_as_child, skip_as_parent, is_leaf ):
self.assertEquals( skip_traversal, aNode.skip_traversal )
self.assertEquals( skip_as_child, aNode. skip_as_child)
self.assertEquals( skip_as_parent, aNode. skip_as_parent)
self.assertEquals( is_leaf , aNode. is_leaf )
class TestRoot( TestSuper ):
def testRoot( self ):
self.condition( self.root, **{'skip_traversal': False, 'skip_as_child': True, 'skip_as_parent': False, 'is_leaf': False} )
class TestRoot0( TestSuper ):
def testRoot0( self ):
self.condition( self.root[0], **{'skip_traversal': False, 'skip_as_child': False, 'skip_as_parent': False, 'is_leaf': False} )
class TestRoot1( TestSuper ):
def testRoot1( self ):
self.condition( self.root[1], **{'skip_traversal': True, 'skip_as_child': True, 'skip_as_parent': True})
class TestRoot10( TestSuper ):
def testRoot10( self ):
self.condition( self.root[1][0], **{'skip_traversal': True})
class TestRoot00( TestSuper ):
def testRoot00( self ):
self.condition( self.root[0][0], **{'is_leaf': False, 'skip_traversal': False, 'skip_as_child': False, 'skip_as_parent': False})
class TestRoot0( TestSuper ):
def testRoot000( self ):
self.condition( root[0][0][0], **{'is_leaf': True, 'skip_traversal': False, 'skip_as_child': False, 'skip_as_parent': True})
class TestRoot04( TestSuper ):
def testRoot04( self ):
self.condition( self.root[0][4], **{'skip_traversal': True, 'skip_as_child': True, 'skip_as_parent': True})
class TestRoot07( TestSuper ):
def testRoot07( self ):
self.condition( self.root[0][7], **{'skip_traversal': False, 'skip_as_child': False, 'skip_as_parent': True})
unittest.main()
关于python - 使 pyunit 显示每个断言的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/557213/