mirror of
https://github.com/kennethreitz/python-guide.git
synced 2026-06-05 14:50:19 +00:00
Fleshed out the tests documentation
The doctest bit still needs some work, I've never really used it myself so not sure what the benefits are :)
This commit is contained in:
+112
-19
@@ -11,55 +11,148 @@ The Basics
|
|||||||
Unittest
|
Unittest
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
Unittest is the batteries-included test module in the Python standard library.
|
||||||
|
Its API will be familiar to anyone who has used any of the JUnit/nUnit/CppUnit
|
||||||
|
series of tools.
|
||||||
|
|
||||||
|
Creating testcases is accomplished by subclassing a TestCase base class
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
def fun(x):
|
||||||
|
return x + 1
|
||||||
|
|
||||||
|
class MyTest(unittest.TestCase):
|
||||||
|
def test(self):
|
||||||
|
self.assertEqual(fun(3), 4)
|
||||||
|
|
||||||
|
As of Python 2.7 unittest also includes its own test discovery mechanisms.
|
||||||
|
|
||||||
|
`unittest in the standard library documentation <http://docs.python.org/library/unittest.html>`_
|
||||||
|
|
||||||
|
|
||||||
Doc Strings
|
Doctest
|
||||||
-----------
|
-------
|
||||||
|
|
||||||
|
|
||||||
|
The doctest module searches for pieces of text that look like interactive Python
|
||||||
|
sessions, and then executes those sessions to verify that they work exactly as
|
||||||
|
shown.
|
||||||
|
|
||||||
|
|
||||||
Tools
|
Tools
|
||||||
:::::
|
:::::
|
||||||
|
|
||||||
|
|
||||||
Doctest
|
|
||||||
-------
|
|
||||||
|
|
||||||
|
|
||||||
py.test
|
py.test
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
py.test is a no-boilerplate alternative to Python's standard unittest module.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
$ pip install pytest
|
$ pip install pytest
|
||||||
|
|
||||||
|
Despite being a fully-featured and extensible test tool it boasts a simple
|
||||||
|
syntax. Creating a test suite is as easy as writing a module with a couple of
|
||||||
|
functions
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
# content of test_sample.py
|
||||||
|
def func(x):
|
||||||
|
return x + 1
|
||||||
|
|
||||||
|
def test_answer():
|
||||||
|
assert func(3) == 5
|
||||||
|
|
||||||
|
and then running the `py.test` command
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ py.test
|
||||||
|
=========================== test session starts ============================
|
||||||
|
platform darwin -- Python 2.7.1 -- pytest-2.2.1
|
||||||
|
collecting ... collected 1 items
|
||||||
|
|
||||||
|
test_sample.py F
|
||||||
|
|
||||||
|
================================= FAILURES =================================
|
||||||
|
_______________________________ test_answer ________________________________
|
||||||
|
|
||||||
|
def test_answer():
|
||||||
|
> assert func(3) == 5
|
||||||
|
E assert 4 == 5
|
||||||
|
E + where 4 = func(3)
|
||||||
|
|
||||||
|
test_sample.py:5: AssertionError
|
||||||
|
========================= 1 failed in 0.02 seconds =========================
|
||||||
|
|
||||||
|
far less work than would be required for the equivalent functionality with the
|
||||||
|
unittest module!
|
||||||
|
|
||||||
|
`py.test <http://pytest.org/latest/>`_
|
||||||
|
|
||||||
|
|
||||||
Nose
|
Nose
|
||||||
----
|
----
|
||||||
|
|
||||||
|
nose extends unittest to make testing easier.
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install tox
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Unittest2
|
|
||||||
---------
|
|
||||||
|
|
||||||
A backport of Python 2.7's
|
|
||||||
|
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
$ pip install tox
|
$ pip install nose
|
||||||
|
|
||||||
|
nose provides automatic test discovery to save you the hassle of manually
|
||||||
|
creating test suites. It also provides numerous plugins for features such as
|
||||||
|
xUnit-compatible test output, coverage reporting, and test selection.
|
||||||
|
|
||||||
|
`nose <http://readthedocs.org/docs/nose/en/latest/>`_
|
||||||
|
|
||||||
|
|
||||||
tox
|
tox
|
||||||
---
|
---
|
||||||
|
|
||||||
|
tox is a tool for automating test environment management and testing against multiple
|
||||||
|
interpreter configurations
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
$ pip install tox
|
$ pip install tox
|
||||||
|
|
||||||
|
tox allows you to configure complicatated multi-parameter test matrices via a
|
||||||
|
simple ini-style configuration file.
|
||||||
|
|
||||||
|
`tox <http://tox.testrun.org/latest/>`_
|
||||||
|
|
||||||
|
Unittest2
|
||||||
|
---------
|
||||||
|
|
||||||
|
unittest2 is a a backport of Python 2.7's unittest module which has an improved
|
||||||
|
API and better assertions over the one available in previous versions of Python.
|
||||||
|
|
||||||
|
If you're using Python 2.6 or below, you can install it with pip
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ pip install unittest2
|
||||||
|
|
||||||
|
You may want to import the module under the name unittest to make porting code
|
||||||
|
to newer versions of the module easier in the future
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
import unittest2 as unittest
|
||||||
|
|
||||||
|
class MyTest(unittest.TestCase):
|
||||||
|
...
|
||||||
|
|
||||||
|
This way if you ever switch to a newer python version and no longer need the
|
||||||
|
unittest2 module, you can simply change the import in your test module without
|
||||||
|
the need to change any other code.
|
||||||
|
|
||||||
|
`unittest2 <http://pypi.python.org/pypi/unittest2>`_
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user