Python 当测试文件位于不同模块时无法找到测试

Python not able to find tests when test files are in different module

我的目录结构如下

horizontalupgrade
  common/
    __init__.py
    upgradestate.py
  tests/
    common/
      __init__.py
      testupgradestate.py

testupgradestate.py

的内容
import unittest
from upgradestate import UpgradeState

class UpgradeStateTest(unittest.TestCase):

    def setUp(self):
        print "Setup Called"

    def test_copy(self):
        u = UpgradeState("")
        print "test_copy Called"

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(UpgradeStateTest)
    runner = unittest.TextTestRunner()
    runner.run(suite)

但是在尝试执行测试时 python 无法找到测试

(venv) dmanna-a01:horizontalupgrade dmanna$ python -m unittest discover  -v

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

OK

但是如果我的目录结构如下所示

horizontalupgrade
  common/
    __init__.py
    upgradestate.py
    testupgradestate.py

然后测试运行没问题

(venv) dmanna-a01:horizontalupgrade dmanna$ python -m unittest discover  -v
test_copy (common.testupgradestate.UpgradeStateTest) ... Setup Called
test_copy Called
ok

----------------------------------------------------------------------
Ran 1 tests in 0.000s

OK

有人可以告诉我我做错了什么吗?如何从不同的测试包进行测试 运行?

您需要 __init__.py tests/。 Unittest 的发现只适用于包。 https://docs.python.org/3/library/unittest.html

试试这个,在你的开头添加这些代码:

import sys
sys.path.append('.../common')

或者你可以在追加中使用绝对路径