What exactly I need to do to make python's unittest
work? I checked the official documentation, SO questions and even tried using nose
, but nothing worked so far. What I'm doing wrong?
bash:~/path/to/project/src/tests$ ls -l
total 8
-rw-r--r-- 1 myuser myuser 342 Out 11 11:51 echo_test.py
-rw-r--r-- 1 myuser myuser 71 Out 11 11:28 __init__.py
bash:~/path/to/project/src/tests$ python -m unittest -v echo_test
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
bash:~/path/to/project/src/tests$ python -m unittest discover
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
bash:~/path/to/project/src/tests$ cat echo_test.py
import unittest
class EchoTest(unittest.TestCase):
def fooTest(self):
self.assertTrue(1==1)
def barTest(self):
self.assertTrue(1==2)
#suite = unittest.TestLoader().loadTestsFromTestCase(TestEcho)
#unittest.TextTestRunner(verbosity=2).run(suite)
if __name__ == '__main__':
unittest.main()
As you can see, the tests simply aren't run and I have no idea why(since I'm not a python programmer).
Just for information, I'm using python 2.7 and the __init__.py
is an empty file.
Any thoughts?
You need to rename the methods to begin with the word "test".
As seen on http://docs.python.org/library/unittest.html :
A testcase is created by subclassing unittest.TestCase. The three individual tests are defined with methods whose names start with the letters test. This naming convention informs the test runner about which methods represent tests.
I would like to mention that you CANNOT run a python unit test as though it were an executable python file. For example, this was my problem:
python -m unittest ./TestMyPythonModule.py
... (stack trace) ...
ValueError: Empty module name
It fails.
However, this works:
python -m unittest TestMyPythonModule
It's easy to overlook at first.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With