import unittest | |
from unittest.test.support import LoggingResult | |
class Test_FunctionTestCase(unittest.TestCase): | |
# "Return the number of tests represented by the this test object. For | |
# TestCase instances, this will always be 1" | |
def test_countTestCases(self): | |
test = unittest.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'] | |
unittest.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', 'tearDown', | |
'addError', 'stopTest'] | |
unittest.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', 'tearDown', | |
'addFailure', 'stopTest'] | |
unittest.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'] | |
unittest.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 = unittest.FunctionTestCase(lambda: None) | |
self.assertIsInstance(test.id(), str) | |
# "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 = unittest.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 = unittest.FunctionTestCase(lambda: None, description=desc) | |
self.assertEqual(test.shortDescription(), "this tests foo") | |
if __name__ == "__main__": | |
unittest.main() | |