是否可以模拟Python测试中模块的不可用性?

凯文·杜

我编写了一个Python程序,该程序利用resourceUnix系统上模块执行一些计时操作,但是回退到time在Windows上使用该模块(因为该resource模块不可用)。该代码看起来像这样:

try:
    import resource
except ImportError:
    import time
    def fn():
        # Implementation using the time module
else:
    def fn():
        # Implementation using the resource module

但是,else由于resource模块在Linux上始终可用,因此我的测试目前仅在块中执行功能有没有一种方法可以模拟内置模块的不可用性,以便我也可以测试time基于-based的功能?我仔细阅读了mock文档,但没有找到关于此的任何信息。

安德鲁·马吉(Andrew Magee)

有点混乱,但是您可以创建一个目录,其中包含一个名为的文件,该文件resource.py引发an ImportError,并将该目录的路径添加到之前sys.path

如果要将模拟测试与未经模拟的测试混合使用,则还必须sys.modules在想重试导入时从中删除模块,否则,更改sys.path将无效。如果有子模块,可能还会有其他问题。

概念证明:

mocked_modules/resource.py

raise ImportError()

测试代码:

import sys
import os

original_path = sys.path[:]
def reset():
    # Teardown
    sys.path = original_path[:]
    if "resource" in sys.modules:
        del sys.modules["resource"]


import resource
print("resource exists")

reset()

sys.path.insert(0, os.path.join(os.getcwd(), "mocked_modules"))


try:
    import resource
except ImportError:
    print("resource does not exist")

reset()
import resource
print("resource exists")

输出:

resource exists
resource does not exist
resource exists

考虑到警告的数量,这让我有点不安(请参阅此问题),因此,如果是您的代码执行导入,则您可能更喜欢将导入抽象为一个函数并对其进行模拟。或者,您可以公开“使用时间模块的实现”并直接对其进行测试。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

“ pip配置了需要TLS / SSL的位置,但是Python中的ssl模块不可用”

Python中的SSL模块不可用(在OSX上)

警告:pip配置了需要TLS / SSL的位置,但是Python中的ssl模块不可用

如何测试服务不可用性和抛出的HTTP错误

Emacs中的Elixir:UndefinedFunctionError:模块不可用

模块“ ngRoute”不可用

sure_future在异步模块中不可用

Phoenix部署中的错误:模块连接不可用

如何加载Sagemaker中不可用的python模块?

导入语句后,包中的模块不可用

Python中的数据可用性图表

Cloud SQL Postgres故障转移和CPU /内存升级过程中预期的不可用性?

如何在我的Perl模块测试中检查网络可用性?

auth在模块中不可用

Python中的子流程模块出现资源暂时不可用的错误

当-i不可用时,在sed中模拟-i标志

如何检查需要在测试中显式导入的模块的可用性?

stat()在iOS模拟器中不可用?

Python在Ubuntu xenial中不可用?

模块“ ngRaven”不可用

在单独的文件中引用时,Angular模块不可用

模块“ mainApp”不可用

模块“mdPickers”不可用

下拉模块在 ngx-bootstrap 中不可用

Angular 5 - 组件在延迟加载模块中不可用

在python中测试websocket可用性的简单方法

为什么模块 python-magic 不可用?

Python:警告:pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用

标准库中是否有一个概念可以测试范围 for 循环中的可用性