Python Unit Testing Quickstart2012-08-20
Suppose you want to write some unit tests in Python. What do? Fortunately, you already have a module called unittest (or unittest2 in Python 2.4-2.6) in the standard library. We’ll use that.
First, create a directory named
tests. Place an empty file named
__init__.py inside. This distinguishes the directory as a package.
Next, create your first test file and place it in the tests directory. I called mine
test_database.py. Prefixing the name with “test” means that it’s not the first file to come up when I type “database” with CtrlP in Vim, but you might not care about such things.
Here’s what I put in my first test.
import unittest from my_module import MyClass class TestDatabase(unittest.TestCase): def setUp(self): pass def tearDown(self): pass def test_something(self): my_thing = MyClass() result = my_thing.my_method("words!") self.assertTrue(result, True) def test_something_else(self): my_thing = MyClass() assertNotEqual(my_thing('a'), my_thing('b'))
The setUp and tearDown methods are optional, but handy. A list of asserts can be found in the docs.
When writing tests, I try to keep each method short and focused. They should be as independent as possible. What little state you need should be established in setUp().
If you look at the example in the official documentation, you’ll see a familiar pattern at the end.
if __name__ == '__main__': unittest.main()
This might be ok if you plan on running the test file directly. But with the tests in a subdirectory of the project, unittest won’t be able to find your modules unless you do nasty things to the path. So you can safely ignore this.
Now, go to the top level directory of your project and run the following command:
python -m unittest discover