Python - Test
Test Runner
Test Runner in Python
Unittest
From the standard library: https://docs.python.org/3/library/unittest.html
Example:
import unittest
import mypackage
class TestMain(unittest.TestCase):
def test_main(self):
mypackage.main()
if __name__ == '__main__':
unittest.main()
Pytest
doctest
doctest describe test that look like interactive Python sessions with:
- the command
- the expectations (the result on the console)
Syntax:
def plus1(n):
"""In a doc
First test
>>> plus1(1)
2
Second test that must throw an exception
>>> plus1(n)
Traceback (most recent call last):
...
NameError: name 'n' is not defined
"""
return n + 1
if __name__ == "__main__":
import doctest
doctest.testmod()
Environment
Tox
tox is a virtualenv management and test command line tool you can use to test you code against multiple version of Python.
Project Definition
setup.py
The test command of setup.py build package and run a unittest suite.
setup.py test --help
Options for 'test' command:
--test-module (-m) Run 'test_suite' in specified module
--test-suite (-s) Run single test, case or suite (e.g.
'module.test_suite')
--test-runner (-r) Test runner to use
It runs a project’s unit tests without actually deploying it:
- by temporarily putting the project’s source on sys.path,
- after first running build_ext -i and egg_info to ensure that any C extensions and project metadata are up-to-date.
The project’s tests must be wrapped in a unittest test suite by either:
- a function,
- a TestCase class
- or method,
- or a module
- or package containing TestCase classes.
If the named suite is:
- a module, and the module has an additional_tests() function, it is called and the result (which must be a unittest.TestSuite) is added to the tests to be run.
- a package, any submodules and subpackages are recursively added to the overall test suite with the default test_loader
Test systems should support wrapping their non-unittest tests in TestSuite objects (including doctest).
Example:
setup(
# ...
test_suite="my_package.tests.test_all"
)