| import unittest2 |
| import six |
| |
| from unittest2.test.support import LoggingResult |
| |
| |
| class Test_FunctionTestCase(unittest2.TestCase): |
| |
| # "Return the number of tests represented by the this test object. For |
| # unittest2.TestCase instances, this will always be 1" |
| def test_countTestCases(self): |
| test = unittest2.FunctionTestCase(lambda: None) |
| |
| self.assertEqual(test.countTestCases(), 1) |
| |
| # "When a setUp() method is defined, the test runner will run that method |
| # prior to each test. Likewise, if a tearDown() method is defined, the |
| # test runner will invoke that method after each test. In the example, |
| # setUp() was used to create a fresh sequence for each test." |
| # |
| # Make sure the proper call order is maintained, even if setUp() raises |
| # an exception. |
| def test_run_call_order__error_in_setUp(self): |
| events = [] |
| result = LoggingResult(events) |
| |
| def setUp(): |
| events.append('setUp') |
| raise RuntimeError('raised by setUp') |
| |
| def test(): |
| events.append('test') |
| |
| def tearDown(): |
| events.append('tearDown') |
| |
| expected = ['startTest', 'setUp', 'addError', 'stopTest'] |
| unittest2.FunctionTestCase(test, setUp, tearDown).run(result) |
| self.assertEqual(events, expected) |
| |
| # "When a setUp() method is defined, the test runner will run that method |
| # prior to each test. Likewise, if a tearDown() method is defined, the |
| # test runner will invoke that method after each test. In the example, |
| # setUp() was used to create a fresh sequence for each test." |
| # |
| # Make sure the proper call order is maintained, even if the test raises |
| # an error (as opposed to a failure). |
| def test_run_call_order__error_in_test(self): |
| events = [] |
| result = LoggingResult(events) |
| |
| def setUp(): |
| events.append('setUp') |
| |
| def test(): |
| events.append('test') |
| raise RuntimeError('raised by test') |
| |
| def tearDown(): |
| events.append('tearDown') |
| |
| expected = ['startTest', 'setUp', 'test', 'addError', 'tearDown', |
| 'stopTest'] |
| unittest2.FunctionTestCase(test, setUp, tearDown).run(result) |
| self.assertEqual(events, expected) |
| |
| # "When a setUp() method is defined, the test runner will run that method |
| # prior to each test. Likewise, if a tearDown() method is defined, the |
| # test runner will invoke that method after each test. In the example, |
| # setUp() was used to create a fresh sequence for each test." |
| # |
| # Make sure the proper call order is maintained, even if the test signals |
| # a failure (as opposed to an error). |
| def test_run_call_order__failure_in_test(self): |
| events = [] |
| result = LoggingResult(events) |
| |
| def setUp(): |
| events.append('setUp') |
| |
| def test(): |
| events.append('test') |
| self.fail('raised by test') |
| |
| def tearDown(): |
| events.append('tearDown') |
| |
| expected = ['startTest', 'setUp', 'test', 'addFailure', 'tearDown', |
| 'stopTest'] |
| unittest2.FunctionTestCase(test, setUp, tearDown).run(result) |
| self.assertEqual(events, expected) |
| |
| # "When a setUp() method is defined, the test runner will run that method |
| # prior to each test. Likewise, if a tearDown() method is defined, the |
| # test runner will invoke that method after each test. In the example, |
| # setUp() was used to create a fresh sequence for each test." |
| # |
| # Make sure the proper call order is maintained, even if tearDown() raises |
| # an exception. |
| def test_run_call_order__error_in_tearDown(self): |
| events = [] |
| result = LoggingResult(events) |
| |
| def setUp(): |
| events.append('setUp') |
| |
| def test(): |
| events.append('test') |
| |
| def tearDown(): |
| events.append('tearDown') |
| raise RuntimeError('raised by tearDown') |
| |
| expected = ['startTest', 'setUp', 'test', 'tearDown', 'addError', |
| 'stopTest'] |
| unittest2.FunctionTestCase(test, setUp, tearDown).run(result) |
| self.assertEqual(events, expected) |
| |
| # "Return a string identifying the specific test case." |
| # |
| # Because of the vague nature of the docs, I'm not going to lock this |
| # test down too much. Really all that can be asserted is that the id() |
| # will be a string (either 8-byte or unicode -- again, because the docs |
| # just say "string") |
| def test_id(self): |
| test = unittest2.FunctionTestCase(lambda: None) |
| |
| self.assertIsInstance(test.id(), six.string_types) |
| |
| # "Returns a one-line description of the test, or None if no description |
| # has been provided. The default implementation of this method returns |
| # the first line of the test method's docstring, if available, or None." |
| def test_shortDescription__no_docstring(self): |
| test = unittest2.FunctionTestCase(lambda: None) |
| |
| self.assertEqual(test.shortDescription(), None) |
| |
| # "Returns a one-line description of the test, or None if no description |
| # has been provided. The default implementation of this method returns |
| # the first line of the test method's docstring, if available, or None." |
| def test_shortDescription__singleline_docstring(self): |
| desc = "this tests foo" |
| test = unittest2.FunctionTestCase(lambda: None, description=desc) |
| |
| self.assertEqual(test.shortDescription(), "this tests foo") |
| |
| |
| if __name__ == '__main__': |
| unittest2.main() |