由于最近在写 OPC UA 以及 MQTT 插件的测试,在写测试的过程我发现我写的代码很难测试。 测试某个接口函数,这个接口函数在内层调用了第三方的方法,比如这个接口启动了一个 mqtt 客户端然后去调用 mqtt 服务器,这样一来由于无法把参数传进去我只能启动一个 mqtt 服务器来完成测试。
问题分析:
为什么我不能 mock 一个服务器?因为客户端调用服务器的代码并没有抽象为一个方法,没有抽象成一个接口,于是我不能充分利用 gomock 的实用性。由于自己的代码跟调用第三方的代码都写在了一起,相当于我在测试的时候实际上也测试了第三方的代码!🙊
解决办法:
将创建 Mqtt 客户端、连接 mqtt 服务器等方法抽象到一个 interface 中,然后将接口作为参数传入自己的代码。这样我就可以利用 Mock 来定义第三方函数的行为!😼