我的鼻子有问题。 我想在测试目录中运行测试,但我不想让鼻子改变工作目录。这是因为我在我的库中使用相对导入和单元测试本身。
首先是目录结构:
app_dir
app.py
library_dir
tests_dir
test_1.py
test_2.py
我目前正在app_dir
目录中运行我的测试:
python -m unittest discover -s library_dir.tests_dir
这很好用。
现在,我想用鼻子(鼻子测试)来做这件事。
当我尝试时,我得到以下内容:
nosetests library_dir.tests_dir --collect-only -vv
Failure: SystemError (Parent module '' not loaded, cannot perform relative import) ... ok
Failure: SystemError (Parent module '' not loaded, cannot perform relative import) ... ok
我已经看过SO上的类似问题(有很多),我可以看到的一个建议就是从unittest本身中删除相对导入,但我喜欢这种模式。另外,如果我改为绝对导入,我会得到一个
(No module named '<the_module_under_test')
是否有任何方法可以从目录中找到测试(例如-w
选项提供但是保持工作目录与调用鼻子的终端的工作目录相同? / p>
答案 0 :(得分:0)
哎呀,看起来我需要做的就是将__init__.py
添加到库和子目录测试目录中。我正在假设鼻子会像PEP 420那样按预期工作
块引用 PEP 420:隐式命名空间包
对不需要 init .py标记文件的程序包目录的本机支持,并且可以自动跨越多个路径段(受各种第三方命名空间程序包方法的启发,如PEP 420中所述)< / p>