模拟调用

单元测试的原则,就是你所测试的函数方法,不要受到所依赖环境的影响,比如网络访问等,因为有时候我们运行单元测试的时候,并没有联网,那么总不能让单元测试因为这个失败吧?所以这时候模拟网络访问就有必要了。

方案1:

针对模拟网络访问,标准库了提供了一个httptest包,可以让我们模拟http的网络调用:
首先我们创建一个处理HTTP请求的函数,并注册路由:
详情见go_demo中的testing/demo2_http_test

方案2:

真的在测试机上模拟一个服务器,然后进行调用测试:
模拟服务器的创建使用的是httptest.NewServer函数,它接收一个http.Handler处理API请求的接口。 代码示例中使用了Hander的适配器模式,http.HandlerFunc是一个函数类型,实现了http.Handler接口,这里是强制类型转换,不是函数的调用

这个创建的模拟服务器,监听的是本机IP127.0.0.1,端口是随机的。接着我们发送Get请求的时候,不再发往/sendjson,而是模拟服务器的地址server.URL,剩下的就和访问正常的URL一样了,打印出结果即可。
详情见go_demo中的testing/demo3_http_test