python - 用测试中的模拟替换客户端库?

标签 python unit-testing nose

有没有办法用单元测试中的模拟对象替换客户端库(与远程服务器通信)?

这是一个图表来解释我正在尝试做的事情

    +---------------+
    |     tests     |----{ mock }
    +---------------+       |
            |               |
            v               |
    +---------------+       |
    |     model     |       |
    +---------------+       |
            |               |
            v               |
    +---------------+       |
    | client-module |<--{replaces}
    +---------------+
            ^
            :
            :
            v
    +---------------+
    |    service    |
    +---------------+

由于测试导入模型,从而导入客户端模块,因此似乎没有办法将模拟应用到模型的内部。

最佳答案

如果 model.py 执行了

import client_module

并且在导入时不使用它的任何功能,您可以这样做

import model

...

model.client_module = MyMockModule()

其中MyMockModule为真正的client_module提供的内容返回合适的模拟。我还没有展示 setUp/tearDown 的东西来解决这个问题,但希望你能明白,

如果 model 确实在导入时使用 client_module 中的内容,则需要替换 sys.modules['client_module '] 在导入模型之前使用模拟模块。

关于python - 用测试中的模拟替换客户端库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4267007/

相关文章:

unit-testing - 您应该对 Hardcode Properties 的返回值进行单元测试吗?

python - notest - 使用 sys.tracebacklimit = 0 抑制回溯不会生效

Python nose 关键测试与非关键测试

python - 从列表列表中删除特定短语

Python:声音文件的频率分析

python - 有没有办法在 wx.lib.filebrowsebutton.FileBrowseButton 中添加多个文件掩码?

python - 通过事件创建wxpython滚动窗口(框架)

angularjs - “未定义”不是函数 - AngularJS 的 Jasmine 单元测试

unit-testing - 对具有依赖关系的命令对象的自定义验证器进行单元测试

python - 我如何使用 nosetest 运行 shell 脚本或另一个 python 脚本