问题
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 docs I can't figure out what to do with the loader object once I have it.
回答1:
I ran into the same issue when running python -m unittest discover
. Here is a good check list to verify your setup. Nose
is more flexible with the allowed configurations, but not necessarily better.
Make sure all files/dirs start with
test
. Do not usetest-something.py
, since that is not a valid python module name. Usetest_something.py
.If you are putting your tests in a sub-directory (e.g.
test/
), make sure you create atest/__init__.py
file so python will treat the directory as a package.All class test cases definitions must be extend
unittest.TestCase
. For exampleclass DataFormatTests(unittest.TestCase)
回答2:
Once you have discovered tests, you can run them with a test runner.
import unittest2
loader = unittest2.TestLoader()
tests = loader.discover('.')
testRunner = unittest2.runner.TextTestRunner()
testRunner.run(tests)
Running the above code will print the test results to standard out.
回答3:
Give how you're trying to use unittest2
from the command line on Python < 2.7
, I think you may have missed the note on the unittest2 PyPI page:
Note
Command line usage
In Python 2.7 you invoke the unittest command line features (including test discover) with
python -m unittest <args>
. As unittest is a package, and the ability to invoke packages withpython -m ...
is new in Python 2.7, we can't do this for unittest2.Instead unittest2 comes with a script unit2. Command line usage:
unit2 discover unit2 -v test_module
There is also a copy of this script called
unit2.py
, useful for Windows which uses file-extensions rather than shebang lines to determine what program to execute files with. Both of these scripts are installed by distutils.
Have you tried the unit2
script which this note recommends as the alternative for older Pythons to the "run package as main script" feature of Python 2.7? Maybe its sources could also be useful to find out exactly how to discover-and-run tests from your own code, if that's what you'd rather do.
来源:https://stackoverflow.com/questions/3295386/python-unittest-and-discovery