我对py.test相当新,并试图为一些遗留代码设置几个简单的黑盒测试。目录结构看起来像这样:
X:\
conftest.py
prgm_A\
src\
test\
test_A.py
prgm_B\
src\
test\
test_B.py
当我从X:\运行py.test时,在Windows 7(或XP)中使用py.test v.2.6.3,py.test返回以下类型的错误消息:
___________ ERROR collecting /prgm_A/test/test_A.py __________________
import file mismatch:
imported module 'test_A' has this __file__ attribute:
X:\prgm_A\test\test_A.py
which is not the same as the test file we want to collect:
X:\\prgm_A\test\test_A.py
HINT: remove __pycache__ / .pyc files and/or use a unique basename for
your test file modules
<and the same for B>
我删除了__pycache__和.pyc文件,但是没有用。在驱动器号码之后额外的反斜杠看起来真的很可疑,但我很确定我不应该为此负责。
当我尝试在linux中运行相同的测试时(尽管程序是为windows编译的),py.test v.2.5.1没有同样的问题。
到目前为止,我的解决方法是从自己的测试目录中为每个单独的程序运行测试,但是在我们的计算机迁移到Windows 7之后,这已停止工作。
有什么想法吗?
我设法用这个最小的例子重现了这个问题:
# conftest.py:
import pytest
def returns_xyz():
return "xyz"
@pytest.fixture(scope="session")
def provider():
"""Provides a subprogram which returns the string 'xyz'."""
return returns_xyz
# prgm_[AB]\test\test_[AB].py:
import pytest
def test_xyz(provider):
assert "xyz" == provider()
答案 0 :(得分:1)
解决此问题所需的一切是删除python路径文件。它是一个包含此扩展程序.pyc
的文件,如果您的测试或项目可用,则还会删除文件夹__pycache__
。
拉明
答案 1 :(得分:0)
问题转移到https://github.com/pytest-dev/pytest/issues/702
这不是一个bug,据我所知,两个测试模块的python模块名称是相同的
py.test抱怨不同的文件以相同的模块名称结尾,从而破坏了细节
你可以验证吗?修改的
已被验证为错误
答案 2 :(得分:-1)
删除项目目录中的所有.pyc文件 执行命令:find。名称* .pyc-删除
对我有用!
答案 3 :(得分:-1)
如here所述,您只需在测试文件夹中添加一个__init__.py
文件即可完成操作。