test_result.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. import io
  2. import sys
  3. import textwrap
  4. from test import support
  5. import traceback
  6. import unittest
  7. class MockTraceback(object):
  8. class TracebackException:
  9. def __init__(self, *args, **kwargs):
  10. self.capture_locals = kwargs.get('capture_locals', False)
  11. def format(self):
  12. result = ['A traceback']
  13. if self.capture_locals:
  14. result.append('locals')
  15. return result
  16. def restore_traceback():
  17. unittest.result.traceback = traceback
  18. class Test_TestResult(unittest.TestCase):
  19. # Note: there are not separate tests for TestResult.wasSuccessful(),
  20. # TestResult.errors, TestResult.failures, TestResult.testsRun or
  21. # TestResult.shouldStop because these only have meaning in terms of
  22. # other TestResult methods.
  23. #
  24. # Accordingly, tests for the aforenamed attributes are incorporated
  25. # in with the tests for the defining methods.
  26. ################################################################
  27. def test_init(self):
  28. result = unittest.TestResult()
  29. self.assertTrue(result.wasSuccessful())
  30. self.assertEqual(len(result.errors), 0)
  31. self.assertEqual(len(result.failures), 0)
  32. self.assertEqual(result.testsRun, 0)
  33. self.assertEqual(result.shouldStop, False)
  34. self.assertIsNone(result._stdout_buffer)
  35. self.assertIsNone(result._stderr_buffer)
  36. # "This method can be called to signal that the set of tests being
  37. # run should be aborted by setting the TestResult's shouldStop
  38. # attribute to True."
  39. def test_stop(self):
  40. result = unittest.TestResult()
  41. result.stop()
  42. self.assertEqual(result.shouldStop, True)
  43. # "Called when the test case test is about to be run. The default
  44. # implementation simply increments the instance's testsRun counter."
  45. def test_startTest(self):
  46. class Foo(unittest.TestCase):
  47. def test_1(self):
  48. pass
  49. test = Foo('test_1')
  50. result = unittest.TestResult()
  51. result.startTest(test)
  52. self.assertTrue(result.wasSuccessful())
  53. self.assertEqual(len(result.errors), 0)
  54. self.assertEqual(len(result.failures), 0)
  55. self.assertEqual(result.testsRun, 1)
  56. self.assertEqual(result.shouldStop, False)
  57. result.stopTest(test)
  58. # "Called after the test case test has been executed, regardless of
  59. # the outcome. The default implementation does nothing."
  60. def test_stopTest(self):
  61. class Foo(unittest.TestCase):
  62. def test_1(self):
  63. pass
  64. test = Foo('test_1')
  65. result = unittest.TestResult()
  66. result.startTest(test)
  67. self.assertTrue(result.wasSuccessful())
  68. self.assertEqual(len(result.errors), 0)
  69. self.assertEqual(len(result.failures), 0)
  70. self.assertEqual(result.testsRun, 1)
  71. self.assertEqual(result.shouldStop, False)
  72. result.stopTest(test)
  73. # Same tests as above; make sure nothing has changed
  74. self.assertTrue(result.wasSuccessful())
  75. self.assertEqual(len(result.errors), 0)
  76. self.assertEqual(len(result.failures), 0)
  77. self.assertEqual(result.testsRun, 1)
  78. self.assertEqual(result.shouldStop, False)
  79. # "Called before and after tests are run. The default implementation does nothing."
  80. def test_startTestRun_stopTestRun(self):
  81. result = unittest.TestResult()
  82. result.startTestRun()
  83. result.stopTestRun()
  84. # "addSuccess(test)"
  85. # ...
  86. # "Called when the test case test succeeds"
  87. # ...
  88. # "wasSuccessful() - Returns True if all tests run so far have passed,
  89. # otherwise returns False"
  90. # ...
  91. # "testsRun - The total number of tests run so far."
  92. # ...
  93. # "errors - A list containing 2-tuples of TestCase instances and
  94. # formatted tracebacks. Each tuple represents a test which raised an
  95. # unexpected exception. Contains formatted
  96. # tracebacks instead of sys.exc_info() results."
  97. # ...
  98. # "failures - A list containing 2-tuples of TestCase instances and
  99. # formatted tracebacks. Each tuple represents a test where a failure was
  100. # explicitly signalled using the TestCase.fail*() or TestCase.assert*()
  101. # methods. Contains formatted tracebacks instead
  102. # of sys.exc_info() results."
  103. def test_addSuccess(self):
  104. class Foo(unittest.TestCase):
  105. def test_1(self):
  106. pass
  107. test = Foo('test_1')
  108. result = unittest.TestResult()
  109. result.startTest(test)
  110. result.addSuccess(test)
  111. result.stopTest(test)
  112. self.assertTrue(result.wasSuccessful())
  113. self.assertEqual(len(result.errors), 0)
  114. self.assertEqual(len(result.failures), 0)
  115. self.assertEqual(result.testsRun, 1)
  116. self.assertEqual(result.shouldStop, False)
  117. # "addFailure(test, err)"
  118. # ...
  119. # "Called when the test case test signals a failure. err is a tuple of
  120. # the form returned by sys.exc_info(): (type, value, traceback)"
  121. # ...
  122. # "wasSuccessful() - Returns True if all tests run so far have passed,
  123. # otherwise returns False"
  124. # ...
  125. # "testsRun - The total number of tests run so far."
  126. # ...
  127. # "errors - A list containing 2-tuples of TestCase instances and
  128. # formatted tracebacks. Each tuple represents a test which raised an
  129. # unexpected exception. Contains formatted
  130. # tracebacks instead of sys.exc_info() results."
  131. # ...
  132. # "failures - A list containing 2-tuples of TestCase instances and
  133. # formatted tracebacks. Each tuple represents a test where a failure was
  134. # explicitly signalled using the TestCase.fail*() or TestCase.assert*()
  135. # methods. Contains formatted tracebacks instead
  136. # of sys.exc_info() results."
  137. def test_addFailure(self):
  138. class Foo(unittest.TestCase):
  139. def test_1(self):
  140. pass
  141. test = Foo('test_1')
  142. try:
  143. test.fail("foo")
  144. except:
  145. exc_info_tuple = sys.exc_info()
  146. result = unittest.TestResult()
  147. result.startTest(test)
  148. result.addFailure(test, exc_info_tuple)
  149. result.stopTest(test)
  150. self.assertFalse(result.wasSuccessful())
  151. self.assertEqual(len(result.errors), 0)
  152. self.assertEqual(len(result.failures), 1)
  153. self.assertEqual(result.testsRun, 1)
  154. self.assertEqual(result.shouldStop, False)
  155. test_case, formatted_exc = result.failures[0]
  156. self.assertIs(test_case, test)
  157. self.assertIsInstance(formatted_exc, str)
  158. # "addError(test, err)"
  159. # ...
  160. # "Called when the test case test raises an unexpected exception err
  161. # is a tuple of the form returned by sys.exc_info():
  162. # (type, value, traceback)"
  163. # ...
  164. # "wasSuccessful() - Returns True if all tests run so far have passed,
  165. # otherwise returns False"
  166. # ...
  167. # "testsRun - The total number of tests run so far."
  168. # ...
  169. # "errors - A list containing 2-tuples of TestCase instances and
  170. # formatted tracebacks. Each tuple represents a test which raised an
  171. # unexpected exception. Contains formatted
  172. # tracebacks instead of sys.exc_info() results."
  173. # ...
  174. # "failures - A list containing 2-tuples of TestCase instances and
  175. # formatted tracebacks. Each tuple represents a test where a failure was
  176. # explicitly signalled using the TestCase.fail*() or TestCase.assert*()
  177. # methods. Contains formatted tracebacks instead
  178. # of sys.exc_info() results."
  179. def test_addError(self):
  180. class Foo(unittest.TestCase):
  181. def test_1(self):
  182. pass
  183. test = Foo('test_1')
  184. try:
  185. raise TypeError()
  186. except:
  187. exc_info_tuple = sys.exc_info()
  188. result = unittest.TestResult()
  189. result.startTest(test)
  190. result.addError(test, exc_info_tuple)
  191. result.stopTest(test)
  192. self.assertFalse(result.wasSuccessful())
  193. self.assertEqual(len(result.errors), 1)
  194. self.assertEqual(len(result.failures), 0)
  195. self.assertEqual(result.testsRun, 1)
  196. self.assertEqual(result.shouldStop, False)
  197. test_case, formatted_exc = result.errors[0]
  198. self.assertIs(test_case, test)
  199. self.assertIsInstance(formatted_exc, str)
  200. def test_addError_locals(self):
  201. class Foo(unittest.TestCase):
  202. def test_1(self):
  203. 1/0
  204. test = Foo('test_1')
  205. result = unittest.TestResult()
  206. result.tb_locals = True
  207. unittest.result.traceback = MockTraceback
  208. self.addCleanup(restore_traceback)
  209. result.startTestRun()
  210. test.run(result)
  211. result.stopTestRun()
  212. self.assertEqual(len(result.errors), 1)
  213. test_case, formatted_exc = result.errors[0]
  214. self.assertEqual('A tracebacklocals', formatted_exc)
  215. def test_addSubTest(self):
  216. class Foo(unittest.TestCase):
  217. def test_1(self):
  218. nonlocal subtest
  219. with self.subTest(foo=1):
  220. subtest = self._subtest
  221. try:
  222. 1/0
  223. except ZeroDivisionError:
  224. exc_info_tuple = sys.exc_info()
  225. # Register an error by hand (to check the API)
  226. result.addSubTest(test, subtest, exc_info_tuple)
  227. # Now trigger a failure
  228. self.fail("some recognizable failure")
  229. subtest = None
  230. test = Foo('test_1')
  231. result = unittest.TestResult()
  232. test.run(result)
  233. self.assertFalse(result.wasSuccessful())
  234. self.assertEqual(len(result.errors), 1)
  235. self.assertEqual(len(result.failures), 1)
  236. self.assertEqual(result.testsRun, 1)
  237. self.assertEqual(result.shouldStop, False)
  238. test_case, formatted_exc = result.errors[0]
  239. self.assertIs(test_case, subtest)
  240. self.assertIn("ZeroDivisionError", formatted_exc)
  241. test_case, formatted_exc = result.failures[0]
  242. self.assertIs(test_case, subtest)
  243. self.assertIn("some recognizable failure", formatted_exc)
  244. def testGetDescriptionWithoutDocstring(self):
  245. result = unittest.TextTestResult(None, True, 1)
  246. self.assertEqual(
  247. result.getDescription(self),
  248. 'testGetDescriptionWithoutDocstring (' + __name__ +
  249. '.Test_TestResult)')
  250. def testGetSubTestDescriptionWithoutDocstring(self):
  251. with self.subTest(foo=1, bar=2):
  252. result = unittest.TextTestResult(None, True, 1)
  253. self.assertEqual(
  254. result.getDescription(self._subtest),
  255. 'testGetSubTestDescriptionWithoutDocstring (' + __name__ +
  256. '.Test_TestResult) (foo=1, bar=2)')
  257. with self.subTest('some message'):
  258. result = unittest.TextTestResult(None, True, 1)
  259. self.assertEqual(
  260. result.getDescription(self._subtest),
  261. 'testGetSubTestDescriptionWithoutDocstring (' + __name__ +
  262. '.Test_TestResult) [some message]')
  263. def testGetSubTestDescriptionWithoutDocstringAndParams(self):
  264. with self.subTest():
  265. result = unittest.TextTestResult(None, True, 1)
  266. self.assertEqual(
  267. result.getDescription(self._subtest),
  268. 'testGetSubTestDescriptionWithoutDocstringAndParams '
  269. '(' + __name__ + '.Test_TestResult) (<subtest>)')
  270. def testGetSubTestDescriptionForFalsyValues(self):
  271. expected = 'testGetSubTestDescriptionForFalsyValues (%s.Test_TestResult) [%s]'
  272. result = unittest.TextTestResult(None, True, 1)
  273. for arg in [0, None, []]:
  274. with self.subTest(arg):
  275. self.assertEqual(
  276. result.getDescription(self._subtest),
  277. expected % (__name__, arg)
  278. )
  279. def testGetNestedSubTestDescriptionWithoutDocstring(self):
  280. with self.subTest(foo=1):
  281. with self.subTest(baz=2, bar=3):
  282. result = unittest.TextTestResult(None, True, 1)
  283. self.assertEqual(
  284. result.getDescription(self._subtest),
  285. 'testGetNestedSubTestDescriptionWithoutDocstring '
  286. '(' + __name__ + '.Test_TestResult) (baz=2, bar=3, foo=1)')
  287. def testGetDuplicatedNestedSubTestDescriptionWithoutDocstring(self):
  288. with self.subTest(foo=1, bar=2):
  289. with self.subTest(baz=3, bar=4):
  290. result = unittest.TextTestResult(None, True, 1)
  291. self.assertEqual(
  292. result.getDescription(self._subtest),
  293. 'testGetDuplicatedNestedSubTestDescriptionWithoutDocstring '
  294. '(' + __name__ + '.Test_TestResult) (baz=3, bar=4, foo=1)')
  295. @unittest.skipIf(sys.flags.optimize >= 2,
  296. "Docstrings are omitted with -O2 and above")
  297. def testGetDescriptionWithOneLineDocstring(self):
  298. """Tests getDescription() for a method with a docstring."""
  299. result = unittest.TextTestResult(None, True, 1)
  300. self.assertEqual(
  301. result.getDescription(self),
  302. ('testGetDescriptionWithOneLineDocstring '
  303. '(' + __name__ + '.Test_TestResult)\n'
  304. 'Tests getDescription() for a method with a docstring.'))
  305. @unittest.skipIf(sys.flags.optimize >= 2,
  306. "Docstrings are omitted with -O2 and above")
  307. def testGetSubTestDescriptionWithOneLineDocstring(self):
  308. """Tests getDescription() for a method with a docstring."""
  309. result = unittest.TextTestResult(None, True, 1)
  310. with self.subTest(foo=1, bar=2):
  311. self.assertEqual(
  312. result.getDescription(self._subtest),
  313. ('testGetSubTestDescriptionWithOneLineDocstring '
  314. '(' + __name__ + '.Test_TestResult) (foo=1, bar=2)\n'
  315. 'Tests getDescription() for a method with a docstring.'))
  316. @unittest.skipIf(sys.flags.optimize >= 2,
  317. "Docstrings are omitted with -O2 and above")
  318. def testGetDescriptionWithMultiLineDocstring(self):
  319. """Tests getDescription() for a method with a longer docstring.
  320. The second line of the docstring.
  321. """
  322. result = unittest.TextTestResult(None, True, 1)
  323. self.assertEqual(
  324. result.getDescription(self),
  325. ('testGetDescriptionWithMultiLineDocstring '
  326. '(' + __name__ + '.Test_TestResult)\n'
  327. 'Tests getDescription() for a method with a longer '
  328. 'docstring.'))
  329. @unittest.skipIf(sys.flags.optimize >= 2,
  330. "Docstrings are omitted with -O2 and above")
  331. def testGetSubTestDescriptionWithMultiLineDocstring(self):
  332. """Tests getDescription() for a method with a longer docstring.
  333. The second line of the docstring.
  334. """
  335. result = unittest.TextTestResult(None, True, 1)
  336. with self.subTest(foo=1, bar=2):
  337. self.assertEqual(
  338. result.getDescription(self._subtest),
  339. ('testGetSubTestDescriptionWithMultiLineDocstring '
  340. '(' + __name__ + '.Test_TestResult) (foo=1, bar=2)\n'
  341. 'Tests getDescription() for a method with a longer '
  342. 'docstring.'))
  343. def testStackFrameTrimming(self):
  344. class Frame(object):
  345. class tb_frame(object):
  346. f_globals = {}
  347. result = unittest.TestResult()
  348. self.assertFalse(result._is_relevant_tb_level(Frame))
  349. Frame.tb_frame.f_globals['__unittest'] = True
  350. self.assertTrue(result._is_relevant_tb_level(Frame))
  351. def testFailFast(self):
  352. result = unittest.TestResult()
  353. result._exc_info_to_string = lambda *_: ''
  354. result.failfast = True
  355. result.addError(None, None)
  356. self.assertTrue(result.shouldStop)
  357. result = unittest.TestResult()
  358. result._exc_info_to_string = lambda *_: ''
  359. result.failfast = True
  360. result.addFailure(None, None)
  361. self.assertTrue(result.shouldStop)
  362. result = unittest.TestResult()
  363. result._exc_info_to_string = lambda *_: ''
  364. result.failfast = True
  365. result.addUnexpectedSuccess(None)
  366. self.assertTrue(result.shouldStop)
  367. def testFailFastSetByRunner(self):
  368. runner = unittest.TextTestRunner(stream=io.StringIO(), failfast=True)
  369. def test(result):
  370. self.assertTrue(result.failfast)
  371. result = runner.run(test)
  372. classDict = dict(unittest.TestResult.__dict__)
  373. for m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess',
  374. '__init__'):
  375. del classDict[m]
  376. def __init__(self, stream=None, descriptions=None, verbosity=None):
  377. self.failures = []
  378. self.errors = []
  379. self.testsRun = 0
  380. self.shouldStop = False
  381. self.buffer = False
  382. self.tb_locals = False
  383. classDict['__init__'] = __init__
  384. OldResult = type('OldResult', (object,), classDict)
  385. class Test_OldTestResult(unittest.TestCase):
  386. def assertOldResultWarning(self, test, failures):
  387. with support.check_warnings(("TestResult has no add.+ method,",
  388. RuntimeWarning)):
  389. result = OldResult()
  390. test.run(result)
  391. self.assertEqual(len(result.failures), failures)
  392. def testOldTestResult(self):
  393. class Test(unittest.TestCase):
  394. def testSkip(self):
  395. self.skipTest('foobar')
  396. @unittest.expectedFailure
  397. def testExpectedFail(self):
  398. raise TypeError
  399. @unittest.expectedFailure
  400. def testUnexpectedSuccess(self):
  401. pass
  402. for test_name, should_pass in (('testSkip', True),
  403. ('testExpectedFail', True),
  404. ('testUnexpectedSuccess', False)):
  405. test = Test(test_name)
  406. self.assertOldResultWarning(test, int(not should_pass))
  407. def testOldTestTesultSetup(self):
  408. class Test(unittest.TestCase):
  409. def setUp(self):
  410. self.skipTest('no reason')
  411. def testFoo(self):
  412. pass
  413. self.assertOldResultWarning(Test('testFoo'), 0)
  414. def testOldTestResultClass(self):
  415. @unittest.skip('no reason')
  416. class Test(unittest.TestCase):
  417. def testFoo(self):
  418. pass
  419. self.assertOldResultWarning(Test('testFoo'), 0)
  420. def testOldResultWithRunner(self):
  421. class Test(unittest.TestCase):
  422. def testFoo(self):
  423. pass
  424. runner = unittest.TextTestRunner(resultclass=OldResult,
  425. stream=io.StringIO())
  426. # This will raise an exception if TextTestRunner can't handle old
  427. # test result objects
  428. runner.run(Test('testFoo'))
  429. class TestOutputBuffering(unittest.TestCase):
  430. def setUp(self):
  431. self._real_out = sys.stdout
  432. self._real_err = sys.stderr
  433. def tearDown(self):
  434. sys.stdout = self._real_out
  435. sys.stderr = self._real_err
  436. def testBufferOutputOff(self):
  437. real_out = self._real_out
  438. real_err = self._real_err
  439. result = unittest.TestResult()
  440. self.assertFalse(result.buffer)
  441. self.assertIs(real_out, sys.stdout)
  442. self.assertIs(real_err, sys.stderr)
  443. result.startTest(self)
  444. self.assertIs(real_out, sys.stdout)
  445. self.assertIs(real_err, sys.stderr)
  446. def testBufferOutputStartTestAddSuccess(self):
  447. real_out = self._real_out
  448. real_err = self._real_err
  449. result = unittest.TestResult()
  450. self.assertFalse(result.buffer)
  451. result.buffer = True
  452. self.assertIs(real_out, sys.stdout)
  453. self.assertIs(real_err, sys.stderr)
  454. result.startTest(self)
  455. self.assertIsNot(real_out, sys.stdout)
  456. self.assertIsNot(real_err, sys.stderr)
  457. self.assertIsInstance(sys.stdout, io.StringIO)
  458. self.assertIsInstance(sys.stderr, io.StringIO)
  459. self.assertIsNot(sys.stdout, sys.stderr)
  460. out_stream = sys.stdout
  461. err_stream = sys.stderr
  462. result._original_stdout = io.StringIO()
  463. result._original_stderr = io.StringIO()
  464. print('foo')
  465. print('bar', file=sys.stderr)
  466. self.assertEqual(out_stream.getvalue(), 'foo\n')
  467. self.assertEqual(err_stream.getvalue(), 'bar\n')
  468. self.assertEqual(result._original_stdout.getvalue(), '')
  469. self.assertEqual(result._original_stderr.getvalue(), '')
  470. result.addSuccess(self)
  471. result.stopTest(self)
  472. self.assertIs(sys.stdout, result._original_stdout)
  473. self.assertIs(sys.stderr, result._original_stderr)
  474. self.assertEqual(result._original_stdout.getvalue(), '')
  475. self.assertEqual(result._original_stderr.getvalue(), '')
  476. self.assertEqual(out_stream.getvalue(), '')
  477. self.assertEqual(err_stream.getvalue(), '')
  478. def getStartedResult(self):
  479. result = unittest.TestResult()
  480. result.buffer = True
  481. result.startTest(self)
  482. return result
  483. def testBufferOutputAddErrorOrFailure(self):
  484. unittest.result.traceback = MockTraceback
  485. self.addCleanup(restore_traceback)
  486. for message_attr, add_attr, include_error in [
  487. ('errors', 'addError', True),
  488. ('failures', 'addFailure', False),
  489. ('errors', 'addError', True),
  490. ('failures', 'addFailure', False)
  491. ]:
  492. result = self.getStartedResult()
  493. buffered_out = sys.stdout
  494. buffered_err = sys.stderr
  495. result._original_stdout = io.StringIO()
  496. result._original_stderr = io.StringIO()
  497. print('foo', file=sys.stdout)
  498. if include_error:
  499. print('bar', file=sys.stderr)
  500. addFunction = getattr(result, add_attr)
  501. addFunction(self, (None, None, None))
  502. result.stopTest(self)
  503. result_list = getattr(result, message_attr)
  504. self.assertEqual(len(result_list), 1)
  505. test, message = result_list[0]
  506. expectedOutMessage = textwrap.dedent("""
  507. Stdout:
  508. foo
  509. """)
  510. expectedErrMessage = ''
  511. if include_error:
  512. expectedErrMessage = textwrap.dedent("""
  513. Stderr:
  514. bar
  515. """)
  516. expectedFullMessage = 'A traceback%s%s' % (expectedOutMessage, expectedErrMessage)
  517. self.assertIs(test, self)
  518. self.assertEqual(result._original_stdout.getvalue(), expectedOutMessage)
  519. self.assertEqual(result._original_stderr.getvalue(), expectedErrMessage)
  520. self.assertMultiLineEqual(message, expectedFullMessage)
  521. def testBufferSetupClass(self):
  522. result = unittest.TestResult()
  523. result.buffer = True
  524. class Foo(unittest.TestCase):
  525. @classmethod
  526. def setUpClass(cls):
  527. 1/0
  528. def test_foo(self):
  529. pass
  530. suite = unittest.TestSuite([Foo('test_foo')])
  531. suite(result)
  532. self.assertEqual(len(result.errors), 1)
  533. def testBufferTearDownClass(self):
  534. result = unittest.TestResult()
  535. result.buffer = True
  536. class Foo(unittest.TestCase):
  537. @classmethod
  538. def tearDownClass(cls):
  539. 1/0
  540. def test_foo(self):
  541. pass
  542. suite = unittest.TestSuite([Foo('test_foo')])
  543. suite(result)
  544. self.assertEqual(len(result.errors), 1)
  545. def testBufferSetUpModule(self):
  546. result = unittest.TestResult()
  547. result.buffer = True
  548. class Foo(unittest.TestCase):
  549. def test_foo(self):
  550. pass
  551. class Module(object):
  552. @staticmethod
  553. def setUpModule():
  554. 1/0
  555. Foo.__module__ = 'Module'
  556. sys.modules['Module'] = Module
  557. self.addCleanup(sys.modules.pop, 'Module')
  558. suite = unittest.TestSuite([Foo('test_foo')])
  559. suite(result)
  560. self.assertEqual(len(result.errors), 1)
  561. def testBufferTearDownModule(self):
  562. result = unittest.TestResult()
  563. result.buffer = True
  564. class Foo(unittest.TestCase):
  565. def test_foo(self):
  566. pass
  567. class Module(object):
  568. @staticmethod
  569. def tearDownModule():
  570. 1/0
  571. Foo.__module__ = 'Module'
  572. sys.modules['Module'] = Module
  573. self.addCleanup(sys.modules.pop, 'Module')
  574. suite = unittest.TestSuite([Foo('test_foo')])
  575. suite(result)
  576. self.assertEqual(len(result.errors), 1)
  577. if __name__ == '__main__':
  578. unittest.main()