'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


Solution 1:[1]

There are three gotcha's that I know of:

  1. Your tests in your TestCases need to be named test_*
  2. 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
  3. 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

Solution 2:[2]

You need to pass in a list of modules.

For example, if your test file is foo.py, then you can run python -m unittest foo.

Solution 3:[3]

For me (running tests from IntelliJ IDEA) I had to remove the class' 'Run configuration'. Earlier on I had wrongly imported the unittest as _pytest.unittest and ran the test class. Of course that didn't work.

I corrected the module import, but the 'run configuration' was still there, causing it to run as a Python script and not as 'Python tests'.

Solution 4:[4]

I had a similar issue and figured out that I had to run python3 -m unittest instead as I had forgotten python defaults to Python 2 on my system

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Multihunter
Solution 2 jh314
Solution 3 Peter Mortensen
Solution 4 Loved