如何从多个目录运行单元测试测试

3

我有两个包含测试的目录:

project/
|
|-- test/
|    |
|    |-- __init__.py
|    |-- test_1.py
|
|-- my_submodule/
     |
     |-- test/
          |
          |-- __init__.py
          |-- test_2.py

如何运行所有测试?

python -m unittest discover . 只会运行test_1.py

显然,python -m unittest discover my_submodule 只会运行test_2.py

2个回答

5

unittest 目前将 project/my_submodule 视为要忽略的任意目录,而不是要导入的包。只需添加 project/my_submodule/__init__.py 即可更改此设置。


2

使用测试套件文件

一种可能的解决方案是编写一个如下所示的测试套件文件:

import unittest

from test import test_1
from my_submodule.test import test_2

loader = unittest.TestLoader()
suite = unittest.TestSuite()

suite.addTest(loader.loadTestsFromModule(test_1))
suite.addTest(loader.loadTestsFromModule(test_2))

runner = unittest.TextTestRunner(verbosity=3)

result = runner.run(suite)

将之前的文件保存在你的文件夹project中,并将其命名为runner_test.py。该代码使用了模块unittest的3个类:

  • TestLoader
  • TestSuite
  • TextTestRunner

关于这些类的信息可以在文档中找到。
还有许多其他编写测试套件的方法:例如,请参阅此文章及其相关链接。

我已经编写了两个示例测试文件,如下所示:

project/test/test_1.py

import unittest

class MyTestCase(unittest.TestCase):

    def test_1(self):
        print("test1")
        self.assertEqual("test1", "test1")


if __name__ == '__main__':
    unittest.main()

project/my_submodule/test/test_2.py

import unittest

class MyTestCase(unittest.TestCase):

    def test_1(self):
        print("test1")
        self.assertEqual("test1", "test1")


if __name__ == '__main__':
    unittest.main()

如果你执行以下命令:
> cd /path/to/folder/project

> python runner_test.py

前一个命令(python runner_test.py)的输出如下:
test_1 (test.test_1.MyTestCase) ... test1
ok
test_2 (my_submodule.test.test_2.MyTestCase) ... test2
ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接