Q:

Python unittest does not run tests

I made a small project called demo, with a single test in it
import unittest

class Test(unittest.TestCase):

    def testName1(self):
        self.assertEqual(5+9, 14)

if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()

However, from command line
ThinkPad-T520:~/workspacep/demo$ python -m unittest

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

Why doesn't this work? In general, how can I run all unit tests from command line with a single line?
The structure of the directory is
demo
    tests
          demo_test1.py  __init__.py

A:

There are three gotcha's that I know of:

Your tests in your TestCases need to be named test_*
Your test files need to be named: test*.py (by default, you can change it with the -p flag when running the tests). e.g. test_demo1.py
Your tests folder needs to have an __init__.py file in it, or else it won't be considered a valid location to import from.

So, for #1, you need to rename the test to test_name_1. And for #2, there's two options:
A - Restructure your files like this:
demo
    tests
        __init__.py
        test_demo1.py

Then run python -m unittest and it should find the test cases.
B - Just run it like: python -m unittest discover -p *test.py

A:

I fought with the same exact problem a while ago and I solved it by using test discovery command.
python -m unittest discover -s .
You can pass in your test file pattern as well and a whole other options https://docs.python.org/2/library/unittest.html#test-discovery

