独立py.测试(忽略\uuu init_uuy.py文件)

2024-10-03 19:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的python模块(我们称之为M1),它是独立的(唯一的导入是collections),在一个包含丑陋的包中。部分丑陋之处在于包的__init__.py文件中。但是M1很好而且干净,并且包含一些测试函数,可以与一起使用py.测试. 在

现在,我想测试M1,忽略所有的丑陋。但是py.测试想运行__init__.py--有什么方法可以阻止它吗?我现在真的无法修复__init__.py文件,我希望将测试函数与M1模块内容本身放在一起。在

我已经读过这个问题:`py.test` and `__init__.py` files它解释了这个问题,但没有提供解决方案。在


我的__init__.py文件如下所示;它只是将项提升到包范围:

from .M1 import CleanThing1, CleanThing2
from .Evil1 import UglyThing1, UglyThing2

问题是Evil1模块需要一些PYTHONPATH黑客才能正确执行,当我运行时

^{pr2}$

它因Evil1模块而失败。但我现在只想测试M1模块。在


Tags: 模块and文件方法frompytestimport
2条回答

不是的py.测试它想运行__init.py__,但是Python解释器。执行__init__.py的规则是Python语言定义的一部分,任何绕过它的方法都必然是一次黑客攻击。在

在本例中,我建议您自己定义一个存根的Evil1模块,并让{}导入该模块。在

您可以使__init__.py文件知道py.测试如所述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.测试像会议一样

^{pr2}$

这样我就可以运行py.test mymodule/M1.py,而不会出现导入错误。在

包结构现在看起来像(我希望类似于您的结构)

package
   |   
   |- __init__.py
   |- mymodule/
         |- M1.py
         |- conftest.py  

相关问题 更多 >