【发布时间】:2021-03-13 16:01:23
【问题描述】:
我有一个使用 dev 和 prod 库的 python 包。 我想确保该包中的某些文件永远不会导入任何开发库,因为这些文件用于部署 并且应该只导入产品库。
例如,我想要一个单元测试,它使用如下所示的 my_package.__init__.py 文件失败,但如果我们删除 dev 库导入则成功。
import libraries.prod
import libraries.dev
制作满足这些条件的独立测试很容易,并且预计会在开发导入my_package.__init__.py 上失败,而在其他情况下成功,例如:
def test_dev_libraries_not_imported_in_package_init():
with mock.patch.dict(sys.modules):
import_module("my_package")
assert "libraries.dev" not in sys.modules
但是,当运行完整的单元测试套件时,例如使用 pytest,此测试可能会失败。 如果同一套件中有另一个单元测试针对开发库运行一些测试,则会发生这种情况,例如:
def test_dev_libraries():
import_module("libraries.dev")
assert "libraries.dev" in sys.modules
理想情况下,我希望这两个测试能够共存于同一个 unit_tests 目录中,但似乎导入在所有测试开始时都一起加载。我想知道是否有办法隔离它?
我看到了一些模拟 sys.module 对象的相关问题,但它没有帮助:独立运行测试工作正常,但不运行是在测试套件级别。
我为重现性创建了一个小型存储库:
https://github.com/Edouard360/unit-test-imports-with-imports-isolation/issues/1
【问题讨论】:
标签: python unit-testing import mocking