[英]pytest: test for import of subpackage
我想做以下事情。 在我的项目中a
我有一个带有实例fac=Fac()
的工厂类Fac
,其中某些类注册到。 这些类驻留在子包ab
。
如果我执行普通import a
,则不会导入子包ab
也不会注册任何类,因此fac.registered_classes
是一个空列表。
导入子包b
fac.registered_classes
将填充子包b
的类。
为了不混淆用户,我添加了这一行
在包a
的__init__.py
中import .b
。
现在,如果fac.registered_classes
不为空,我想用pytest
编写一个基本通过的测试; 所以没有人不小心删除了我的__init__.py
那一行。 让我们称之为测试test_import_b
不同的测试当然也会测试子包b
功能,从而显式地导入b
本身。
但是,似乎测试运行期间的所有导入都可用于所有测试。 如果在__init__.py
删除导入行,则仅运行单个测试test_import_b
失败,但如果同时运行所有测试,则不会再运行。
我该怎么做才能使我的测试设置正常工作?
这是正确的 py.test 和 Python 行为。 模块主体级代码在导入模块时运行。 Python 虚拟机为每个进程维护导入的模块。
我不相信有一个很好的解决方案来实现你想要的行为。 我想到了两种策略
永远不要仅在模块导入时隐式注册任何内容 - 通过函数调用显式注册所有内容,例如使用init()
在明确需要导入并运行 register 的测试中,在测试开始时导入它或制作一个执行导入的夹具
例如
def test_boohoo():
import a.b
# Test goes here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.