用测试中的模拟替换客户端库?
问题描述:
有没有办法在单元测试中用模拟对象替换客户端库(它与远程服务器通信)?图解释什么,我试图做用测试中的模拟替换客户端库?
+---------------+
| tests |----{ mock }
+---------------+ |
| |
v |
+---------------+ |
| model | |
+---------------+ |
| |
v |
+---------------+ |
| client-module |<--{replaces}
+---------------+
^
:
:
v
+---------------+
| service |
+---------------+
因为测试导入模型,其中进口客户端模块
这里,似乎没有被应用模拟的方式到模型的内部。
答
如果model.py做一个
import client_module
,并在导入时不使用它的任何功能,你可以做
import model
...
model.client_module = MyMockModule()
其中对于东西真正client_module
MyMockModule
返回适合嘲笑提供。我还没有安装/拆卸的东西来照顾这一点,但希望你的想法,
如果model
并从client_module
使用的东西在导入时,你需要用嘲笑模块更换sys.modules['client_module']
在导入之前model
。