java.lang.IllegalArgumentException: createCheck port must be greater than0

背景

最近禅道bug比较多,自从参加工作以来,很少有写测试类的习惯,为了减少bug率,决定每次开发完之后都先严格自测一遍。

问题

当前项目采用spring cloud 做微服务开发,所以写测试类必须启动上下文,在启动测试类时出现了如图所示的问题。

在这里插入图片描述

正常启动应用没问题,但是一启动测试类就会出现这个问题,百度发现没有人出现过相关情况,于是决定debug运行过程,看看到底是哪里出了问题。

先看报异常的地方

报异常的地方

可以看到是因为port不满足大于0的条件,才报的这个异常,那么port的值是什么时候设置的呢,代码往回走

在这里插入图片描述

发现port的值为-1,确实是不满足条件的,根据源代码的参数名和和类名来看,这个port应该是从properties配置中读取出来的。而配置文件中是配置了这个参数的

在这里插入图片描述

在这里插入图片描述

查看properties变量,发现里面确实有很多配置,发现port的值竟然是-1,很有可能是没有读取到properties文件中的配置。但是发现oscarbossuser这个变量又是读取到了,怀疑很有可能是${}这个表达式导致没有读取到这个变量。于是将serviceName随便改个名字,再debug,发现配置的值生效了。于是将port手动配置为8082,再启动测试类,果然测试通过,port的值能正确读取到了,问题便解决了。

总结

这个问题的发生的原因还是配置没有被正确读取到,无法在网上获取足够的经验前,自己亲自到代码中去查找原因才是最靠谱的,而且解决这种问题要善于使用控制变量法和大胆猜测,先提出怀疑,再改变部分因素查证,问题的原因便能很快定位到。