如何从父目录运行unitest testsuite

时间:2018-05-03 16:37:58

标签: python python-unittest test-suite

我有以下目录结构:

.
├── README.md
├── src
│   ├── __init__.py
│   └── foo.py
└── test
    ├── __init__.py
    └── runner.py
    └── test_foo.py

测试文件如下所示:

test_foo.py

import unittest
from ..src.foo import *

class TestFoo(unittest.TestCase):
        def setUp(self):
            pass
        
        def test_foo(self):
            foo = Foo()
            res = foo.get_something('bar')
        
            if res is None:
                self.fail('something bad happened')

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

runner.py

import unittest

# import test modules
import test_foo

# initialize the test suite
loader = unittest.TestLoader()
suite  = unittest.TestSuite()

# add tests to the test suite
suite.addTests(loader.loadTestsFromModule(test_foo))

# initialize a runner, pass it your suite and run it
runner = unittest.TextTestRunner(verbosity=3)
result = runner.run(suite)

我想在测试套件中从父目录运行我的所有测试,所以我尝试这样调用单位:

python -m test/runner.py

但它抱怨如下:

$ python -m test/runner.py 
/usr/bin/python: Import by filename is not supported.

如果我移动到测试目录,我会收到不同的错误:

$ python -m runner
  File "test_foo.py", line 2, in <module>
    from ..src.foo import *
ValueError: Attempted relative import in non-package

如果可能,我想将所有与测试相关的内容保存在父/测试目录中。

知道我在这里做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试python -m unittest test.runner。这是我使用的结构。

├── README.md
├── src
│   ├── __init__.py
│   └── foo.py
└── test
    ├── __init__.py
    └── test_foo.py
    └── runner.py

我的foo.py包含一个简单的函数foo。我将test_foo.py中的import语句更改为以下内容:

from src.foo import foo

我还直接从runner.py直接进行了以下更改。

from test import test_foo

然后在父目录的命令行中python -m unittest test.runner

此结构仅适用于父目录。如果我在测试目录中尝试它,则无法导入。