모든 주장에 대해 Pyunit Show 출력을 만드십시오
-
05-09-2019 - |
문제
테스트 당 첫 번째 테스트 사례에서 실패하지 않고 모든 주장에 대해 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 변수에 저장된 노드의 멤버 함수를 호출하는 방법입니다.
해결책 2
내장형 유형 () 공장을 사용하여 새로운 테스트 케이스 클래스를 동적으로 만들어서 할 수있었습니다.
root = get_nodes.mmnode_plus.factory('somenodes.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}),
]
i = 0
for (node, states) in tests:
for test_state, exp_result in states.iteritems():
input = node.__getattribute__(test_state)()
errstr = "expected %s, not %s for state %s of node %s" % (input, exp_result, test_state, repr(node))
locals()['foo' + str(i)] = type('foo' + str(i), (unittest.TestCase,),
{'input': input, 'exp_result': exp_result, 'errstr': errstr, 'testme': lambda self: self.assertEqual(self.input, self.exp_result, self.errstr)})
i += 1
다른 팁
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()
제휴하지 않습니다 StackOverflow