Table of Contents
Python unit testing framework, sometimes called
pyunit is a standard unit testing framework.
unittest supports test automation, sharing of setup and shutdown code for tests, aggregation of tests into collections, and independence of the tests from the reporting framework.
unittest module provides a rich set of tools for building and running tests for any cases.
How to use #
unittest is a standard builtin Python library, we can use
unittest with just importing it, like
import unittest. Here is basic example how to write simple testcase using
Basic example #
import unittest class TestStringMethods(unittest.TestCase): def test_upper(self): self.assertEqual('Insilicogen'.upper(), 'INSILICOGEN') def test_isupper(self): self.assertTrue('INCO'.isupper()) self.assertFalse('Inco'.isupper()) def test_split(self): s = '안녕하세요 Sam 입니다' self.assertEqual(s.split(), ['안녕하세요', 'Sam', '입니다']) # check that s.split fails when the separator is not a string with self.assertRaises(TypeError): s.split(2) if __name__ == '__main__': unittest.main()
Command-line interface #
unittest module can be used from command-line to test modules or running different test cases.
$ python -m unittest test_module1 test_module2 $ python -m unittest test_module.TestClass $ python -m unittest test_module.TestClass.test_method
Command-line options #
unittest supports some command-line options:
-b, --buffer #
The standard output and standard error streams are buffered during the test run. Output during a passing test is discarded. Output is echoed normally on test fail or error and is added to the failure messages.
-c, --catch #
Control-C during the test run waits for the current test to end and then reports all the results so far. A second Control-C raises the normal KeyboardInterrupt exception.
-f, --failfast #
Stop the test run on the first error or failure.
The command line can also be used for test discovery, for running all of the tests in a project or just a subset.
Test discovery #
unittest supports automatic discovering test modules if all files are importable from top of directory. The basic usage is:
cd project_directory python -m unittest discover
Test cases #
Instances of the
TestCase class represent the smallest testable units in the unittest universe. This class is intended to be used as a base class, with specific tests being implemented by concrete subclasses.
Each instance of
TestCase will run a single test method and also can be removed or added to
def suite(): suite = unittest.TestSuite() suite.addTest(WidgetTestCase('test_default_size')) suite.addTest(WidgetTestCase('test_resize')) return suite
Method called to prepare the test fixture. This is called immediately before calling the test method.
Method called immediately after the test method has been called and the result recorded.
A class method called before tests in an individual class run. Example:
@classmethod def setUpClass(cls): ...
A class method called after tests in an individual class have run. tearDownClass is called with the class as the only argument and must be decorated as a classmethod():
@classmethod def tearDownClass(cls): ...
Run the test, collecting the result into the test result object passed as result.
Calling this during a test method or setUp() skips the current test.
Run the test without collecting the result. This allows exceptions raised by the test to be propagated to the caller, and can be used to support running tests under a debugger.