1 | import unittest
|
---|
2 |
|
---|
3 | from .support import LoggingResult
|
---|
4 |
|
---|
5 |
|
---|
6 | class Test_FunctionTestCase(unittest.TestCase):
|
---|
7 |
|
---|
8 | # "Return the number of tests represented by the this test object. For
|
---|
9 | # TestCase instances, this will always be 1"
|
---|
10 | def test_countTestCases(self):
|
---|
11 | test = unittest.FunctionTestCase(lambda: None)
|
---|
12 |
|
---|
13 | self.assertEqual(test.countTestCases(), 1)
|
---|
14 |
|
---|
15 | # "When a setUp() method is defined, the test runner will run that method
|
---|
16 | # prior to each test. Likewise, if a tearDown() method is defined, the
|
---|
17 | # test runner will invoke that method after each test. In the example,
|
---|
18 | # setUp() was used to create a fresh sequence for each test."
|
---|
19 | #
|
---|
20 | # Make sure the proper call order is maintained, even if setUp() raises
|
---|
21 | # an exception.
|
---|
22 | def test_run_call_order__error_in_setUp(self):
|
---|
23 | events = []
|
---|
24 | result = LoggingResult(events)
|
---|
25 |
|
---|
26 | def setUp():
|
---|
27 | events.append('setUp')
|
---|
28 | raise RuntimeError('raised by setUp')
|
---|
29 |
|
---|
30 | def test():
|
---|
31 | events.append('test')
|
---|
32 |
|
---|
33 | def tearDown():
|
---|
34 | events.append('tearDown')
|
---|
35 |
|
---|
36 | expected = ['startTest', 'setUp', 'addError', 'stopTest']
|
---|
37 | unittest.FunctionTestCase(test, setUp, tearDown).run(result)
|
---|
38 | self.assertEqual(events, expected)
|
---|
39 |
|
---|
40 | # "When a setUp() method is defined, the test runner will run that method
|
---|
41 | # prior to each test. Likewise, if a tearDown() method is defined, the
|
---|
42 | # test runner will invoke that method after each test. In the example,
|
---|
43 | # setUp() was used to create a fresh sequence for each test."
|
---|
44 | #
|
---|
45 | # Make sure the proper call order is maintained, even if the test raises
|
---|
46 | # an error (as opposed to a failure).
|
---|
47 | def test_run_call_order__error_in_test(self):
|
---|
48 | events = []
|
---|
49 | result = LoggingResult(events)
|
---|
50 |
|
---|
51 | def setUp():
|
---|
52 | events.append('setUp')
|
---|
53 |
|
---|
54 | def test():
|
---|
55 | events.append('test')
|
---|
56 | raise RuntimeError('raised by test')
|
---|
57 |
|
---|
58 | def tearDown():
|
---|
59 | events.append('tearDown')
|
---|
60 |
|
---|
61 | expected = ['startTest', 'setUp', 'test', 'addError', 'tearDown',
|
---|
62 | 'stopTest']
|
---|
63 | unittest.FunctionTestCase(test, setUp, tearDown).run(result)
|
---|
64 | self.assertEqual(events, expected)
|
---|
65 |
|
---|
66 | # "When a setUp() method is defined, the test runner will run that method
|
---|
67 | # prior to each test. Likewise, if a tearDown() method is defined, the
|
---|
68 | # test runner will invoke that method after each test. In the example,
|
---|
69 | # setUp() was used to create a fresh sequence for each test."
|
---|
70 | #
|
---|
71 | # Make sure the proper call order is maintained, even if the test signals
|
---|
72 | # a failure (as opposed to an error).
|
---|
73 | def test_run_call_order__failure_in_test(self):
|
---|
74 | events = []
|
---|
75 | result = LoggingResult(events)
|
---|
76 |
|
---|
77 | def setUp():
|
---|
78 | events.append('setUp')
|
---|
79 |
|
---|
80 | def test():
|
---|
81 | events.append('test')
|
---|
82 | self.fail('raised by test')
|
---|
83 |
|
---|
84 | def tearDown():
|
---|
85 | events.append('tearDown')
|
---|
86 |
|
---|
87 | expected = ['startTest', 'setUp', 'test', 'addFailure', 'tearDown',
|
---|
88 | 'stopTest']
|
---|
89 | unittest.FunctionTestCase(test, setUp, tearDown).run(result)
|
---|
90 | self.assertEqual(events, expected)
|
---|
91 |
|
---|
92 | # "When a setUp() method is defined, the test runner will run that method
|
---|
93 | # prior to each test. Likewise, if a tearDown() method is defined, the
|
---|
94 | # test runner will invoke that method after each test. In the example,
|
---|
95 | # setUp() was used to create a fresh sequence for each test."
|
---|
96 | #
|
---|
97 | # Make sure the proper call order is maintained, even if tearDown() raises
|
---|
98 | # an exception.
|
---|
99 | def test_run_call_order__error_in_tearDown(self):
|
---|
100 | events = []
|
---|
101 | result = LoggingResult(events)
|
---|
102 |
|
---|
103 | def setUp():
|
---|
104 | events.append('setUp')
|
---|
105 |
|
---|
106 | def test():
|
---|
107 | events.append('test')
|
---|
108 |
|
---|
109 | def tearDown():
|
---|
110 | events.append('tearDown')
|
---|
111 | raise RuntimeError('raised by tearDown')
|
---|
112 |
|
---|
113 | expected = ['startTest', 'setUp', 'test', 'tearDown', 'addError',
|
---|
114 | 'stopTest']
|
---|
115 | unittest.FunctionTestCase(test, setUp, tearDown).run(result)
|
---|
116 | self.assertEqual(events, expected)
|
---|
117 |
|
---|
118 | # "Return a string identifying the specific test case."
|
---|
119 | #
|
---|
120 | # Because of the vague nature of the docs, I'm not going to lock this
|
---|
121 | # test down too much. Really all that can be asserted is that the id()
|
---|
122 | # will be a string (either 8-byte or unicode -- again, because the docs
|
---|
123 | # just say "string")
|
---|
124 | def test_id(self):
|
---|
125 | test = unittest.FunctionTestCase(lambda: None)
|
---|
126 |
|
---|
127 | self.assertIsInstance(test.id(), basestring)
|
---|
128 |
|
---|
129 | # "Returns a one-line description of the test, or None if no description
|
---|
130 | # has been provided. The default implementation of this method returns
|
---|
131 | # the first line of the test method's docstring, if available, or None."
|
---|
132 | def test_shortDescription__no_docstring(self):
|
---|
133 | test = unittest.FunctionTestCase(lambda: None)
|
---|
134 |
|
---|
135 | self.assertEqual(test.shortDescription(), None)
|
---|
136 |
|
---|
137 | # "Returns a one-line description of the test, or None if no description
|
---|
138 | # has been provided. The default implementation of this method returns
|
---|
139 | # the first line of the test method's docstring, if available, or None."
|
---|
140 | def test_shortDescription__singleline_docstring(self):
|
---|
141 | desc = "this tests foo"
|
---|
142 | test = unittest.FunctionTestCase(lambda: None, description=desc)
|
---|
143 |
|
---|
144 | self.assertEqual(test.shortDescription(), "this tests foo")
|
---|
145 |
|
---|
146 |
|
---|
147 | if __name__ == '__main__':
|
---|
148 | unittest.main()
|
---|