From a2a848a3c15915639e33241a4016846a9e082906 Mon Sep 17 00:00:00 2001 From: Gustavo Niemeyer Date: Tue, 1 Jul 2008 14:05:27 -0300 Subject: Prevent the MockerTestCase base from leaving the mocker in replay mode while the base class run() method runs, since this might have additional logic which touches mocked content (time.time() was one case). Thanks to Thomas for the initial debugging. --- test.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'test.py') diff --git a/test.py b/test.py index 334407f..4f3c39b 100755 --- a/test.py +++ b/test.py @@ -941,6 +941,33 @@ class MockerTestCaseTest(TestCase): if os.path.exists(path): shutil.rmtree(path) + def test_mocker_is_restored_between_method_return_and_cleanup(self): + """ + Certain base classes which MockerTestCase is mixed with may have + additional logic after the real test method is run, but before + run() returns. We don't want to perform mocking checks on these. + """ + class CustomTestCase(unittest.TestCase): + def run(self, result): + import time + super(CustomTestCase, self).run(result) + self.assertTrue(time.time()) + + class MyTest(CustomTestCase, MockerTestCase): + def test_method(self): + import time + time_mock = self.mocker.replace(time.time) + time_mock() + self.mocker.count(0) # Forbit it entirely. + self.mocker.replay() + + result = unittest.TestResult() + MyTest("test_method").run(result) + + self.assertEquals(result.errors, []) + self.assertEquals(result.failures, []) + + class MockerTest(TestCase): -- cgit v1.2.1