0X09:测试代码
NATS源码学习系列文章基于gnatsd1.0.0。该版本于2017年7月13 日发布(Release v1.0.0),在此之前v0.9.6是2016年12月 16日发布的,中间隔了半年。算是一个比较完备的版本,但是这个版本还没有增加集群支持。为什么选择这个版本呢? 因为一来这个版本比较稳定,同时也包含了集群管理和Stream 落地相关的逻辑,相对完善。
在gnatsd的github 上, coveralls的代码覆盖率有91%

他是如何做到的呢?好的产品离不开充分的测试,gnats写了大量的单元测试和功能测试代码。
单元测试
在gnatsd的代码中,有两块测试代码,一部分是在server目录下的,主要文件有:
其中,一部分是逻辑功能性测试,比如在 ping_test.go里面,仅仅是调用了go-nats的Connect
但是这里其实会运行到服务器CONNCECT/PING协议的处理逻辑。
另一部分是针对某个功能单元测试,比如对sublist的测试:
在插入三个主题时,判断节点数目是否正确。
所以在看gnatsd的代码时,如果看不懂的地方,可以结合这些测试用来来一起阅读。另外也可以结合Debug Golang With Delve 进行调试,来看代码的执行步骤。
功能测试
在和server同级的目录下,还有个test的目录,主要文件有:
在这个目录下执行:
可以看到ping的相关逻辑都有被测试到,比如 "TestPingInterval"测试了Ping的间隔,”TestUnpromptedPong“ 测试了没有收到Pong时候的表现。
借助这里的测试可以排查在日常使用gnatsd过程常见的一些问题。
总结
测试驱动开发曾经是很热门的开发模式,要去学习一个项目的代码,测试代码其实很好的切入点。gnatsd提供了覆盖超过91%的测试代码,所以学习过程中,借助 这些测试代码来看其源码会事半功倍。
Last updated
Was this helpful?