I keep forgetting this, so here it is, two exerpts from Conventions for Python test discovery and unittest support:
pytest
implements the following standard test discovery:
- If no arguments are specified then collection starts from testpaths (if configured) or the current directory. Alternatively, command line arguments can be used in any combination of directories, file names or node ids.
- Recurse into directories, unless they match norecursedirs.
- In those directories, search for
test_*.py
or*_test.py
files, imported by their test package name.- From those files, collect test items:
test_
prefixed test functions or methods outside of classtest_
prefixed test functions or methods insideTest
prefixed test classes (without an__init__
method)
Install py.test
Install via pip install pytest
without the dot.
Layout
./
+-- thing.py
'-- test_thing.py
Example Content
Example content of test_thing.py
:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
from thing import Thing
class TestThing(unittest.TestCase):
def setUp(self):
self.testee = Thing()
def test_first_thing(self):
assert self.testee is not None
Now just run py.test
in the base directory.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Thing(object):
def __unicode__(self):
fixme: write for readability
def __str__(self):
return unicode(self).encode("utf-8")
def __repr__(self):
fixme: write for unambiguous representation (uniquely identify objects)