python - 在 Python 中模拟导入的模块

标签 python unit-testing mocking

我正在尝试为使用导入的外部对象的函数实现单元测试。

例如 helpers.py 是:

import os
import pylons

def some_func(arg):
   ...
   var1 = os.path.exist(...)
   var2 = os.path.getmtime(...)
   var3 = pylons.request.environ['HTTP_HOST']
   ...

所以当我为它创建单元测试时,我做了一些模拟(在我的例子中是 minimock) 并替换对 pylons.request 和 os.path 的引用:

import helpers
def test_some_func():
    helpers.pylons.request = minimock.Mock("pylons.request")
    helpers.pylons.request.environ = { 'HTTP_HOST': "localhost" }
    helpers.os.path = minimock.Mock(....)
    ...
    some_func(...)
    # assert
    ...

这对我来说不太好。

有没有其他更好的方法或策略来替代 Python 中的导入函数/对象?

最佳答案

使用 voidspace 的模拟库及其修补/包装功能。

http://www.voidspace.org.uk/python/mock/patch.html

关于python - 在 Python 中模拟导入的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2348712/

相关文章:

python - 在 Windows 上安装 PyGI 找不到 Python 安装

python - NumPy 用于设置行和列的索引

python - 16 个任务的序列化结果总大小 (1048.5 MB) 大于 spark.driver.maxResultSize (1024.0 MB)

android - 如何在针对特定 Gradle 构建风格时从命令行运行单个单元测试方法

ios - 单元测试单例 : mock and swizzle

python - 无法解析余数 : '%' from '%' Django

unit-testing - 你把单元测试放在哪里?

python - 从类方法中模拟/修补计算属性的值

database - 在没有库的情况下如何模拟数据库调用?

java - Spock Mock 与 Guava Collection