Merge lp:~lifeless/testtools/344023 into lp:~testtools-committers/testtools/trunk

Proposed by Robert Collins
Status: Merged
Merged at revision: not available
Proposed branch: lp:~lifeless/testtools/344023
Merge into: lp:~testtools-committers/testtools/trunk
Diff against target: 134 lines
3 files modified
testtools/testcase.py (+14/-0)
testtools/tests/test_testresult.py (+2/-0)
testtools/tests/test_testtools.py (+28/-0)
To merge this branch: bzr merge lp:~lifeless/testtools/344023
Reviewer Review Type Date Requested Status
Jonathan Lange Approve
Review via email: mp+13947@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Robert Collins (lifeless) wrote :

Cause failing to upcall to setup or teardown to cause a test to error.

Revision history for this message
Jonathan Lange (jml) wrote :

Looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'testtools/testcase.py'
2--- testtools/testcase.py 2009-10-25 10:19:09 +0000
3+++ testtools/testcase.py 2009-10-26 11:30:33 +0000
4@@ -29,6 +29,8 @@
5 unittest.TestCase.__init__(self, *args, **kwargs)
6 self._cleanups = []
7 self._last_unique_id = 0
8+ self.__setup_called = False
9+ self.__teardown_callled = False
10
11 def __eq__(self, other):
12 eq = getattr(unittest.TestCase, '__eq__', None)
13@@ -165,6 +167,8 @@
14 try:
15 try:
16 self.setUp()
17+ if not self.__setup_called:
18+ raise ValueError("setup was not called")
19 except KeyboardInterrupt:
20 raise
21 except self.skipException, e:
22@@ -192,6 +196,8 @@
23 cleanupsOk = self._runCleanups(result)
24 try:
25 self.tearDown()
26+ if not self.__teardown_callled:
27+ raise ValueError("teardown was not called")
28 except KeyboardInterrupt:
29 raise
30 except:
31@@ -202,6 +208,14 @@
32 finally:
33 result.stopTest(self)
34
35+ def setUp(self):
36+ unittest.TestCase.setUp(self)
37+ self.__setup_called = True
38+
39+ def tearDown(self):
40+ unittest.TestCase.tearDown(self)
41+ self.__teardown_callled = True
42+
43
44 def clone_test_with_new_id(test, new_id):
45 """Copy a TestCase, and give the copied test a new id."""
46
47=== modified file 'testtools/tests/test_testresult.py'
48--- testtools/tests/test_testresult.py 2009-08-26 22:02:12 +0000
49+++ testtools/tests/test_testresult.py 2009-10-26 11:30:33 +0000
50@@ -91,6 +91,7 @@
51 """Tests for `MultiTestResult`."""
52
53 def setUp(self):
54+ TestWithFakeExceptions.setUp(self)
55 self.result1 = LoggingResult([])
56 self.result2 = LoggingResult([])
57 self.multiResult = MultiTestResult(self.result1, self.result2)
58@@ -167,6 +168,7 @@
59 """Tests for `MultiTestResult`."""
60
61 def setUp(self):
62+ TestWithFakeExceptions.setUp(self)
63 self.result_semaphore = threading.Semaphore(1)
64 self.target = LoggingResult([])
65 self.result1 = ThreadsafeForwardingResult(self.target,
66
67=== modified file 'testtools/tests/test_testtools.py'
68--- testtools/tests/test_testtools.py 2009-10-25 10:19:09 +0000
69+++ testtools/tests/test_testtools.py 2009-10-26 11:30:33 +0000
70@@ -231,6 +231,7 @@
71 """A test that logs calls to setUp, runTest and tearDown."""
72
73 def setUp(self):
74+ TestCase.setUp(self)
75 self._calls = ['setUp']
76
77 def brokenSetUp(self):
78@@ -243,8 +244,10 @@
79
80 def tearDown(self):
81 self._calls.append('tearDown')
82+ TestCase.tearDown(self)
83
84 def setUp(self):
85+ TestCase.setUp(self)
86 self._result_calls = []
87 self.test = TestAddCleanup.LoggingTest('runTest')
88 self.logging_result = LoggingResult(self._result_calls)
89@@ -382,6 +385,29 @@
90 "the original test instance should be unchanged.")
91
92
93+class TestSetupTearDown(TestCase):
94+
95+ def test_setUpNotCalled(self):
96+ class DoesnotcallsetUp(TestCase):
97+ def setUp(self):
98+ pass
99+ def test_method(self):
100+ pass
101+ result = unittest.TestResult()
102+ DoesnotcallsetUp('test_method').run(result)
103+ self.assertEqual(1, len(result.errors))
104+
105+ def test_tearDownNotCalled(self):
106+ class DoesnotcalltearDown(TestCase):
107+ def test_method(self):
108+ pass
109+ def tearDown(self):
110+ pass
111+ result = unittest.TestResult()
112+ DoesnotcalltearDown('test_method').run(result)
113+ self.assertEqual(1, len(result.errors))
114+
115+
116 class TestSkipping(TestCase):
117 """Tests for skipping of tests functionality."""
118
119@@ -391,6 +417,7 @@
120 def test_skipException_in_setup_calls_result_addSkip(self):
121 class TestThatRaisesInSetUp(TestCase):
122 def setUp(self):
123+ TestCase.setUp(self)
124 self.skip("skipping this test")
125 def test_that_passes(self):
126 pass
127@@ -417,6 +444,7 @@
128 def test_skip__in_setup_with_old_result_object_calls_addError(self):
129 class SkippingTest(TestCase):
130 def setUp(self):
131+ TestCase.setUp(self)
132 raise self.skipException("skipping this test")
133 def test_that_raises_skipException(self):
134 pass

Subscribers

People subscribed via source and target branches