我有以下目录结构:
.
├── 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
如果可能,我想将所有与测试相关的内容保存在父/测试目录中。
知道我在这里做错了吗?
谢谢!
答案 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
此结构仅适用于父目录。如果我在测试目录中尝试它,则无法导入。