代码之家  ›  专栏  ›  技术社区  ›  Phillip B Oldham

用来自测试的模拟替换客户端库?

  •  1
  • Phillip B Oldham  · 技术社区  · 15 年前

    有没有一种方法可以从UnitTest中将客户端库(与远程服务器通信)替换为模拟对象?

    这是一张图表来解释我想做什么

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

    由于测试导入了模型(它导入了客户机模块),所以似乎没有一种方法可以将模拟应用到模型的内部。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Vinay Sajip    15 年前

    如果model.py执行

    import client_module
    

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

    import model
    
    ...
    
    model.client_module = MyMockModule()
    

    哪里 MyMockModule 返回合适的实物模型 client_module 提供。我没有展示安装/拆卸工具来处理这个问题,但希望你能理解这个想法,

    如果 model 做 使用来自的内容 客户机模块 在进口时,您需要更换 sys.modules['client_module'] 导入前使用模拟模块 模型 .