我重写了公司原有的代码,对pb文件进行了更改,为了保持原有的功能保持正确性,我不得不进行测试,但是我没有找到任何一个关于Golang Grpc的测试,通过查找,可以不用开启Grcp客户端进行测试,只需要通过反射就可以调用到Grcp的方法,并进行测试。
一、导包
导入我们编写的文件,他们都在同一目录下
1 | package pb_test |
二、初始化配置文件
初始化配置文件,我们可以在init
方法中进行初始化,或者使用TestMain
方法进行测试化。我选择了init
方法,因为我不要那么复杂的初始化,并且比较容易编写。
1 | var userHandler pb2.UserHandler |
这里解释一下userHandler
是我们通过pb文件生成的接口,而NewUserAdapter
则是我们的实现类。通过依赖注入的方式使我们可以很方便的测试任何方法。
三、编写测试服务
我们注册一个服务,这个服务不需要通过网络。我们只需要在内存中通信就可以了,这可以的节省资源,并且启动很迅速。开启服务后我们通过s.Start()
启动服务,并通过gc.Dial(s.Options().Address, gc.WithInsecure())
进行拨号。现在我们可以进行测试了。
1 | func TestGRPCServer(t *testing.T) { |
四、通过异步的方式加速测试
我们通过sync.WaitGroup
或者是用goroutine
和chan
的组合,可以轻易的编写出异步的测试代码。
1 | func getUserInfo(t *testing.T, wg *sync.WaitGroup, cc *gc.ClientConn) { |
通过反射规则调用,规则是文件名/方法名
,并且开头字母大写。
五、总结
到现在为止,已经不错了。我们可以很方便的测试我们编写的pb文件,并且这种测试是可以进行一次配置,多次测试的。通过异步使得测试更有效率,但是异步看起来还有些丑陋,可以使用goroutine
和chan
模式做一些简化。