我的目录结构如下:
DirA
__init__.py
MyClass.py
unittests <------------------directory
MyClassTest.py
MyClassTest.py是可执行的:
import unittest
from . import MyClass
class MyClassTestCase(unittest.TestCase):
""" Testcase """
...
.....
if __name__ == '__main__':
unittest.main()
我收到错误&#34;父模块&#39;&#39;未加载,无法执行相对导入&#34;在这一行:
from . import MyClass
我想将单元测试放在&#39;单元测试&#39;正在测试的模块旁边的目录。有没有办法做到这一点,并有权访问我正在测试的父目录中的所有模块?
答案 0 :(得分:2)
您是否尝试过像这样运行测试:
cd DirA
python -m unittest discover unittests "*Test.py"
这应该可以正确找到您的模块。见Test Discovery
答案 1 :(得分:1)
根据您自己的偏好以及您希望导入模块的方式,使用您想要的任何布局:
要查找unittests
文件夹,因为该名称不是常规名称(默认情况下单元测试脚本会查找test
文件夹),您可以使用discover
选项unittest
模块,告诉您如何找到测试脚本:
python -m unittest discover unittests
请注意,第一个unittest
是Python模块,第二个unittests
(带有s
)是您放置测试脚本的目录。
另一种方法是使用nosetest
模块(或其他新的单元测试模块,如pytest
或tox
),无论您将它们放置在何处,都应自动找到您的测试脚本:
nosetests -vv
要修复导入错误,您应该使用完整的相对(或绝对)路径:
from ..MyClass import MyClass # Relative path from the unittests folder
from MyClass import MyClass # Absolute path from the root folder, which will only work for some unit test modules or if you configure your unit test module to run the tests from the root
答案 2 :(得分:0)
建议的结构,就是看看你的结构:
my_app
my_pkg
__init__.py
module_foo.py
test
__init__.py
test_module_foo.py
main.py
从my_app
内运行所有内容,这样您就可以在测试代码和核心代码之间使用所有相同的模块引用。