python - 使 pyunit 显示每个断言的输出

标签 python unit-testing python-unittest

如何使 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/

相关文章:

java - 如何在不让 Mockito 进行额外调用的情况下使用 Mockito 检查对函数的调用次数

unit-testing - 单元测试的总体思路

Python 单元测试 - 'gcsfs.utils.HttpError: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket.'

python - Django分页: How do 'paginator' and 'page_obj' get injected into a template's context?

Python:找到第一个不匹配的字符

python - 如何从应用程序引擎中的数据存储区获取基于时间的实体

javascript - 如何使用 vue-test-utils 测试 CSS 框架自定义组件

python - 从 pyunit 单元测试生成测试覆盖率信息?

python - 如何比较两个文件作为单元测试的一部分,同时在不匹配的情况下获得有用的输出?

python - 如何在 Windows 10 上的 VSCode 中激活 conda 环境