案情回顾
最近在工作中遇到前人写的这样的单元测试(已脱敏处理)
public class ServiceClientTest {
@Test
public void getConfig() throws Exception {
ServiceClient client = ServiceClient
.getInstance("http://10.5.98.200:8080/api/");
···
···
}
}
"http://10.5.97.200:8080/api/" 这样写有什么问题吗?貌似没问题。
原因分析
但问题在于,现在很多互联网公司使用的是Docker + Kubernetes 搭建的虚拟集群服务器,可以动态按需伸缩容。你的测试环境的服务器会随着项目的迭代更新导致要升级服务器,有些公司不是直接在原来的机器上扩容,而是先缩容,再扩容,(就是先删了虚拟服务器,再重新申请一个虚拟服务器)也就是会换服务器,换IP地址,好了,一换机器,前人写的这个这种写死IP地址的单元测试就过不了了。本着谁的单元测试谁负责的原则,但是现实中经常遇到,写这单元测试的人早离职了,就变成了谁发布谁修改。后来的人还得改前人的单元测试(一边改一边骂娘)。
解决方法
大多数client.getInstance()有默认参数,你不填的话是连接到本机。所以尽量不要写死这个IP地址。尽量做到不要给后人留坑。能默认连接的就不要写死IP。单元测试质量宁愿差点,也别影响别人。
比较合适的写法
public class ServiceClientTest {
@Test
public void getConfig() throws Exception {
ServiceClient client = ServiceClient.getInstance();
···
···
}
}