py.test – 当不同目录中的testing调用相同时,testing发现失败

使用py.test,在不同目录中调用相同的两个testing会导致py.test失败。 这是为什么? 我怎样才能改变这个不重命名所有的testing?

重复做:

; cd /var/tmp/my_test_module ; mkdir -p ook/test ; mkdir -p eek/test ; touch ook/test/test_proxy.py ; touch eek/test/test_proxy.py ; py.test ============================= test session starts ============================== platform linux2 -- Python 2.7.3 -- pytest-2.2.4 collected 0 items / 1 errors ==================================== ERRORS ==================================== ___________________ ERROR collecting ook/test/test_proxy.py ____________________ import file mismatch: imported module 'test_proxy' has this __file__ attribute: /home/ygolanski/code/junk/python/mymodule/eek/test/test_proxy.py which is not the same as the test file we want to collect: /home/ygolanski/code/junk/python/mymodule/ook/test/test_proxy.py HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules =========================== 1 error in 0.01 seconds ============================ 

放一个__init__.py是解决冲突的一种方法。 与鼻子不同,当前pytest不会尝试卸载testing模块,以导入具有相同导入名称的testing模块。 我曾经认为做这种自动import有点神奇,可能会混淆人们对import机制的期望; 有时候人们依赖于testing模块的全局状态,并且在自动卸载的时候会丢失它(从另一个testing模块导入的testing模块可能会做出意想不到的事情)。 但也许这不是一个实际问题,pytest可以添加一个类似的黑客…

这是py.test的一个实际特性。 您可以在pytest.org中find此行为的原因- 良好的集成实践 – selecttesting布局/导入规则 :

  • 避免testing目录中的__init__.py文件。 这样,如果安装的软件包包含testing,testing可以轻松地运行在已安装版本的mypkg

因为这是使用py.test的推荐工作stream程:使用pip install -e正在开发的软件包,然后对其进行testing。

正因为如此,我自己select了独特的testing名称,按照惯例configuration方式。 它还可以确保在各种testing运行输出中不会出现含糊不清的testing名称。

如果你需要保留testing名称而不关心上面提到的function,你可以放一个__init__.py

Interesting Posts