Outputting data from unit test in Python

前端 未结 14 2456
孤城傲影
孤城傲影 2020-12-02 05:45

If I\'m writing unit tests in python (using the unittest module), is it possible to output data from a failed test, so I can examine it to help deduce what caused the error?

14条回答
  •  既然无缘
    2020-12-02 06:24

    I don't think this is quite what your looking for, there's no way to display variable values that don't fail, but this may help you get closer to outputting the results the way you want.

    You can use the TestResult object returned by the TestRunner.run() for results analysis and processing. Particularly, TestResult.errors and TestResult.failures

    About the TestResults Object:

    http://docs.python.org/library/unittest.html#id3

    And some code to point you in the right direction:

    >>> import random
    >>> import unittest
    >>>
    >>> class TestSequenceFunctions(unittest.TestCase):
    ...     def setUp(self):
    ...         self.seq = range(5)
    ...     def testshuffle(self):
    ...         # make sure the shuffled sequence does not lose any elements
    ...         random.shuffle(self.seq)
    ...         self.seq.sort()
    ...         self.assertEqual(self.seq, range(10))
    ...     def testchoice(self):
    ...         element = random.choice(self.seq)
    ...         error_test = 1/0
    ...         self.assert_(element in self.seq)
    ...     def testsample(self):
    ...         self.assertRaises(ValueError, random.sample, self.seq, 20)
    ...         for element in random.sample(self.seq, 5):
    ...             self.assert_(element in self.seq)
    ...
    >>> suite = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
    >>> testResult = unittest.TextTestRunner(verbosity=2).run(suite)
    testchoice (__main__.TestSequenceFunctions) ... ERROR
    testsample (__main__.TestSequenceFunctions) ... ok
    testshuffle (__main__.TestSequenceFunctions) ... FAIL
    
    ======================================================================
    ERROR: testchoice (__main__.TestSequenceFunctions)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "", line 11, in testchoice
    ZeroDivisionError: integer division or modulo by zero
    
    ======================================================================
    FAIL: testshuffle (__main__.TestSequenceFunctions)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "", line 8, in testshuffle
    AssertionError: [0, 1, 2, 3, 4] != [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    ----------------------------------------------------------------------
    Ran 3 tests in 0.031s
    
    FAILED (failures=1, errors=1)
    >>>
    >>> testResult.errors
    [(<__main__.TestSequenceFunctions testMethod=testchoice>, 'Traceback (most recent call last):\n  File ""
    , line 11, in testchoice\nZeroDivisionError: integer division or modulo by zero\n')]
    >>>
    >>> testResult.failures
    [(<__main__.TestSequenceFunctions testMethod=testshuffle>, 'Traceback (most recent call last):\n  File "
    ", line 8, in testshuffle\nAssertionError: [0, 1, 2, 3, 4] != [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n')]
    >>>
    

提交回复
热议问题