UnitTest break on failure

Scott David Daniels Scott.Daniels at Acm.Org
Tue Feb 10 14:27:57 EST 2009


Qian Xu wrote:
> i am writing unit tests and have got a problem:
> I want to test some code sequence like:
> 
>  self.assertEquals(testMethod1(), expected_value1);
>  self.assertEquals(testMethod2(), expected_value2);
> 
> However, if the first test item is failed, no more tests will be executed.
> Can I tell Python, 
> 1. go ahead, if a failure is occurred. 
> 2. stop, if an error is occurred?

Well, each test should be independent, so generally you are talking
about multiple tests.  If you really want a test to see if you get
through a sequence in a single test:
     import unittest
     ...
     class MyTest(unittest.TestCase):

         def test_multi_step(self):
             expectations = [(expected_value1, testMethod1),
                             (expected_value2, testMethod2),
                             (final_expected, another_test, arg1, arg2)]
             try:
                 for step, ops in enumerate(expectations):
                     self.assertEquals(ops[0], ops[1](*ops[2:]))
             except Exception, why:
                 raise ValueError('Step %s Failed: %s' % (step, why))
             # here the test passed.
     ...
     if __name__ == '__main__':
         unittest.main()

Note this gives you less information (the traceback doesn't go down
to the actual error), but it shows you what step failed.

--Scott David Daniels
Scott.Daniels at Acm.Org



More information about the Python-list mailing list