pytest为此用例提供了一个固定装置:monkeypatch.syspath_prepend
。
您可以
sys.path在导入位置列表之前添加路径。编写一个伪造品
fwlib.py并将其包括在测试中,并根据需要附加目录。像其他测试模块一样,它不需要包含在发行版中。
在自己玩完这个游戏之后,我实际上无法弄清楚如何使夹具从库代码正确模拟模块级别的导入。在测试运行时,已经导入了库代码,因此修补为时已晚。
不过,我可以提供不同的解决方案,它的工作原理:您可以从内注入的名字
conftest.py,其中最先被引进。被测代码中的后续import语句将仅重用中已经存在的对象
sys.modules。
包装结构:
$ tree ..├── conftest.py├── lib│ └── my_lib.py└── tests └── test_my_lib.py2 directories, 3 files
文件内容:
# conftest.pyimport sysdef fwlib_sum(a, b): return a + bmodule = type(sys)('fwlib')module.sum = fwlib_sumsys.modules['fwlib'] = module库文件:
# lib/my_lib.pyimport fwlibdef fw_sum(a, b): return fwlib.sum(a, b)
测试文件:
# lib/test_my_lib.pyimport my_libdef test_sum(): assert my_lib.fw_sum(1, 2) == 3



