Python unittest and discovery

Aaron picture Aaron · Jul 21, 2010 · Viewed 41.7k times · Source

I have directories, which contain files named like: test_foo.py

Each file is a test case.

I would like to

  1. Run all the tests in a directory from the command line. I am using unittest2, since we are running Python 2.5.1. From one of these directories I tried typing this at the command line:

     python -m unittest2 discover -p 'test_*.py'
    

    and several different variants. I get no error, but nothing happens. I was expecting all the tests within all the test cases in that directory to run and get results.

  2. I also tried having a script in the directory where I did this:

     loader = unittest2.TestLoader()
     t = loader.discover('.')
    

    If I print the t variable, I can see my test cases, but from the documentation I can't figure out what to do with the loader object once I have it.

Answer

cmcginty picture cmcginty · Jul 13, 2011

I ran into the same issue when running python -m unittest discover. Here is a good checklist to verify your setup. Nose is more flexible with the allowed configurations, but not necessarily better.

  1. Make sure all files/directories start with test. Do not use test-something.py, since that is not a valid Python module name. Use test_something.py.

  2. If you are putting your tests in a sub-directory (e.g. test/), make sure you create a test/__init__.py file so python will treat the directory as a package.

  3. All class test cases definitions must be extend unittest.TestCase. For example,

    class DataFormatTests(unittest.TestCase)