Python unittest 不运行测试

Bar*_*ich 11 python unit-testing python-unittest

我做了一个叫做demo的小项目,里面有一个测试

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()
Run Code Online (Sandbox Code Playgroud)

但是,从命令行

ThinkPad-T520:~/workspacep/demo$ python -m unittest

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

OK
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?一般而言,如何使用一行从命令行运行所有单元测试?

目录的结构是

demo
    tests
          demo_test1.py  __init__.py
Run Code Online (Sandbox Code Playgroud)

Mul*_*ter 16

我知道的三个陷阱:

  1. 您的 TestCases 中的测试需要命名 test_*
  2. 您的测试文件需要命名:(test*.py默认情况下,您可以-p在运行测试时使用标志更改它)。例如test_demo1.py
  3. 您的tests文件夹中需要有一个__init__.py文件,否则它不会被视为导入的有效位置。

因此,对于 #1,您需要将测试重命名为test_name_1. 对于#2,有两种选择:

A - 像这样重构你的文件:

demo
    tests
        __init__.py
        test_demo1.py
Run Code Online (Sandbox Code Playgroud)

然后运行python -m unittest,它应该找到测试用例。

B - 像这样运行它:python -m unittest discover -p *test.py


k.w*_*ome 8

不久前,我遇到了同样的问题,并通过使用 test discovery 命令解决了它。

python -m unittest discover -s .

您也可以传入您的测试文件模式以及其他选项https://docs.python.org/2/library/unittest.html#test-discovery

  • @BaronYugovich它可能失败了,因为匹配测试文件的默认模式是`test*.py`而测试文件名`demo_test1.py`只能由`"*_test*.py"`匹配试试`python -m unittest发现 -s 。-p "*test*.py"` (2认同)