独立 py.test(忽略 __init__.py 文件)
standalone py.test (ignore __init__.py files)
我有一个简单的 python 模块(我们称之为 M1),它是独立的(唯一的导入是 collections
),在一个包含丑陋的包中。部分丑陋之处在于包的 __init__.py
文件。但是 M1 非常干净,包含一些用于 py.test.
的测试函数
现在,我想测试M1,忽略所有的丑陋。但是 py.test 想要运行 __init__.py
-- 有什么办法可以防止这种情况发生吗? 我真的无法修复 __init__.py
文件时间,我想将我的测试函数包含在 M1 模块内容本身的旁边。
我已经读过这个 SO 问题:`py.test` and `__init__.py` files 它解释了问题但没有提供解决方案。
我的 __init__.py
文件看起来像这样;它只是将项目提升到包范围:
from .M1 import CleanThing1, CleanThing2
from .Evil1 import UglyThing1, UglyThing2
问题是 Evil1 模块需要一些 PYTHONPATH 黑客才能正确执行,当我运行时
py.test mymodule/M1.py
由于 Evil1 模块,它失败了。但是我现在只想测试一下M1模块。
不是py.test想要运行__init.py__
,而是Python解释器。 __init__.py
执行的规则是 Python 语言定义的一部分,任何绕过它的方法都必然是 hack。
在这种情况下,我建议您定义一个自己的存根 Evil1
模块,然后让 M1
导入那个模块。
您可以使 __init__.py
文件知道 py.test,如 here 所述。
所以基本上创建一个mymodule/conftest.py
文件,内容如下
def pytest_configure(config):
import sys
sys._called_from_test = True
def pytest_unconfigure(config):
del sys._called_from_test
并在 __init__.py
文件中检查您是否在 py.test 会话中,例如
import sys
if hasattr(sys, '_called_from_test'):
# called from within a test run
pass
else:
# failing imports
from .M1 import CleanThing1, CleanThing2
from .Evil1 import UglyThing1, UglyThing2
这样我就可以 运行 py.test mymodule/M1.py
而不会出现导入错误。
包结构现在看起来像(我希望它与您的结构相似)
package
|
|- __init__.py
|- mymodule/
|- M1.py
|- conftest.py
我有一个简单的 python 模块(我们称之为 M1),它是独立的(唯一的导入是 collections
),在一个包含丑陋的包中。部分丑陋之处在于包的 __init__.py
文件。但是 M1 非常干净,包含一些用于 py.test.
现在,我想测试M1,忽略所有的丑陋。但是 py.test 想要运行 __init__.py
-- 有什么办法可以防止这种情况发生吗? 我真的无法修复 __init__.py
文件时间,我想将我的测试函数包含在 M1 模块内容本身的旁边。
我已经读过这个 SO 问题:`py.test` and `__init__.py` files 它解释了问题但没有提供解决方案。
我的 __init__.py
文件看起来像这样;它只是将项目提升到包范围:
from .M1 import CleanThing1, CleanThing2
from .Evil1 import UglyThing1, UglyThing2
问题是 Evil1 模块需要一些 PYTHONPATH 黑客才能正确执行,当我运行时
py.test mymodule/M1.py
由于 Evil1 模块,它失败了。但是我现在只想测试一下M1模块。
不是py.test想要运行__init.py__
,而是Python解释器。 __init__.py
执行的规则是 Python 语言定义的一部分,任何绕过它的方法都必然是 hack。
在这种情况下,我建议您定义一个自己的存根 Evil1
模块,然后让 M1
导入那个模块。
您可以使 __init__.py
文件知道 py.test,如 here 所述。
所以基本上创建一个mymodule/conftest.py
文件,内容如下
def pytest_configure(config):
import sys
sys._called_from_test = True
def pytest_unconfigure(config):
del sys._called_from_test
并在 __init__.py
文件中检查您是否在 py.test 会话中,例如
import sys
if hasattr(sys, '_called_from_test'):
# called from within a test run
pass
else:
# failing imports
from .M1 import CleanThing1, CleanThing2
from .Evil1 import UglyThing1, UglyThing2
这样我就可以 运行 py.test mymodule/M1.py
而不会出现导入错误。
包结构现在看起来像(我希望它与您的结构相似)
package
|
|- __init__.py
|- mymodule/
|- M1.py
|- conftest.py