python - 不从文件加载 python 模块

标签 python unit-testing module import

我在一个库中有一些 python 代码,它试图从一个模块中加载一个简单的值,该模块将存在于使用该库的应用程序中

from somemodule import simplevalue

通常,使用该库的应用程序将具有模块文件并且一切正常。但是,在该库的单元测试中,该模块不存在。我知道我可以创建一个临时文件并在运行时将该文件添加到我的路径中,但我很好奇 python 中是否有一种方法可以将某些内容加载到内存中以允许上述导入工作。

这更像是一种好奇,说“将模块添加到您的测试路径”没有帮助:P

最佳答案

是的。使用 types.ModuleType 创建一个新的模块对象,然后将其添加到 sys.modules:

sys.modules["somename"] = types.ModuleType("somename")

然后您可以执行import somename。如果您需要向其添加类或函数,请在调用测试脚本之前将其导入,并向其添加函数:

def myfunc(x, y, z):
    ...

somename.myfunc = myfunc

这是不言而喻的,但以防万一:这主要是学术上的好奇心。它有一些用于测试的用途,但除此之外,坚持以通常的方式导入东西。

顺便说一句,我是怎么知道的:我遇到了测试中使用的技术,为非 Windows 系统上的 _winreg 模块制作一个“ stub ”。 Here it is在使用中。

关于python - 不从文件加载 python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4686893/

相关文章:

python - 在 docker 容器上构建图像以运行自己的 Django 应用程序

javascript - 在 jest.mock(moduleName,factory) 工厂函数中模拟多个命名导出

java - JUnit 4.8.1/Maven 简单测试不起作用

c# - 如何对具有 void 返回类型的方法进行单元测试?

python - 导入自定义包和模块出现问题?

python - 具有零值的 Pandas 汇总表

python - 如何获取 grep 命令的输出(Python)

python - 如何计算数据框行的标准偏差?

linux - 构建一个没有源代码的linux模块

scala - Play 模块测试和 FakeApplication