Python unittest无法运行测试

时间:2018-08-25 02:45:01

标签: python unit-testing python-unittest

我做了一个名为演示的小项目,里面只有一个测试

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()

但是,从命令行

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

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

OK

为什么这行不通?通常,如何在命令行中用一行来运行所有单元测试?

目录的结构是

demo
    tests
          demo_test1.py  __init__.py

4 个答案:

答案 0 :(得分:3)

前一阵子我也遇到了同样的问题,并使用测试发现命令解决了这个问题。

python -m unittest discover -s .

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

答案 1 :(得分:1)

您需要传递list of modules

例如,如果您的测试文件是foo.py,则可以运行python -m unittest foo

答案 2 :(得分:0)

对我来说(从Intellij运行测试),我必须删除该类的“运行配置”。早些时候,我错误地将单元测试导入为_pytest.unittest并运行了测试类。当然那没用。我更正了模块导入,但是“运行配置”仍然存在,导致它作为Python脚本而不是“ Python测试”运行。

答案 3 :(得分:0)

我知道三个陷阱:

  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

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

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