繁体   English   中英

pytest:测试子包的导入

[英]pytest: test for import of subpackage

我想做以下事情。 在我的项目中a我有一个带有实例fac=Fac()的工厂类Fac ,其中某些类注册到。 这些类驻留在子包ab

如果我执行普通import a ,则不会导入子包ab也不会注册任何类,因此fac.registered_classes是一个空列表。

导入子包b fac.registered_classes将填充子包b的类。

为了不混淆用户,我添加了这一行

在包a__init__.pyimport .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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM