From 1c85c0d30ec4cd8b43991e409a1a0b99564f9fac Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 19 Jun 2018 17:53:58 +0200 Subject: [PATCH 1/2] bpo-33746: Fix test_unittest when run in verbose mode Only make sure that the result is in unittest.signals._results, don't check the full content of unittest.signals._results. support._run_suite() uses TextTestRunner in verbose mode, but TextTestRunner.run() calls registerResult(result) which made the test fail with "odd object in result set". Call also removeResult() to restore unittest.signals._results to avoid side effect of the test. --- Lib/unittest/test/test_break.py | 13 ++++--------- .../Tests/2018-06-19-17-55-46.bpo-33746.Sz7avn.rst | 1 + 2 files changed, 5 insertions(+), 9 deletions(-) create mode 100644 Misc/NEWS.d/next/Tests/2018-06-19-17-55-46.bpo-33746.Sz7avn.rst diff --git a/Lib/unittest/test/test_break.py b/Lib/unittest/test/test_break.py index aa2c69eea01ac6..b299e3b3fcd20f 100644 --- a/Lib/unittest/test/test_break.py +++ b/Lib/unittest/test/test_break.py @@ -40,15 +40,10 @@ def testInstallHandler(self): def testRegisterResult(self): result = unittest.TestResult() unittest.registerResult(result) - - for ref in unittest.signals._results: - if ref is result: - break - elif ref is not result: - self.fail("odd object in result set") - else: - self.fail("result not found") - + try: + self.assertIn(result, unittest.signals._results) + finally: + unittest.removeResult(result) def testInterruptCaught(self): default_handler = signal.getsignal(signal.SIGINT) diff --git a/Misc/NEWS.d/next/Tests/2018-06-19-17-55-46.bpo-33746.Sz7avn.rst b/Misc/NEWS.d/next/Tests/2018-06-19-17-55-46.bpo-33746.Sz7avn.rst new file mode 100644 index 00000000000000..e79399f03be553 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2018-06-19-17-55-46.bpo-33746.Sz7avn.rst @@ -0,0 +1 @@ +Fix test_unittest when run in verbose mode. From 5cd2e3d57fa1d93f25d9e839e6eb59ebbcc88245 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 20 Jun 2018 10:45:26 +0200 Subject: [PATCH 2/2] Enhance testRegisterResult() Test also assertNotIn() before registerResult(). --- Lib/unittest/test/test_break.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Lib/unittest/test/test_break.py b/Lib/unittest/test/test_break.py index b299e3b3fcd20f..eebd2b610ce11f 100644 --- a/Lib/unittest/test/test_break.py +++ b/Lib/unittest/test/test_break.py @@ -39,6 +39,8 @@ def testInstallHandler(self): def testRegisterResult(self): result = unittest.TestResult() + self.assertNotIn(result, unittest.signals._results) + unittest.registerResult(result) try: self.assertIn(result, unittest.signals._results)