这几天被奇怪的bug搞的头大,技术宅一开始都不知道发生了啥,后来我们合力搞明白了root cause
先放上Exception:
|
|
看起来是Mockito的问题,由于我们package用到了PowerMock 1.6.3(技术宅说他也不知道为啥用这个,他说应该找时间refactor去掉这个),不兼容Mockito 2.x,所以我们现在还在用Mockito 1.x,我一直以为bug是因为我引入的新package用到了Mockito 2.0的新特性,所以不兼容,于是我陷入了两难的境地。
不过!!在我看了个sage还是StackOverflow说他的controller和service不能一起跑unit test之后,我仿佛有了点思路,仔细研究了一下LdapGroupControl的class,突然发现有可能是我在其中用到了
|
|
然而这些个controller的unit test并没有initialize AppConfig,所以找不到这些String来初始化,给技术宅一说,技术宅觉得有可能,于是我就改成了@Value形式:
|
|
恩成功了!!!不报那个错误了!!!!
对的 报了另外一个错误 :)
还原一下当时的大概代码:
|
|
这个map疯狂报错,说映射结果是A.X = null。于是又一顿找原因为什么。我一度怀疑是我的@Value没有配置好。
疯狂操作疯狂试验…
疯狂操作疯狂试验…
疯狂操作疯狂试验…
疯狂操作疯狂试验…
结果最后还是在StackOverflow搜到了原因…有人把@Value标记的值加在了Constructor里,导致变量值为null,回答是Constructor的加载发生在Spring inject之前,所以会为null。恍然大悟,但是@PostConstruct annotation只适用于method level,对于attribute不适用,于是我直接把这个map放到了我需要用的method里面。。
解决了,build成功了,真是一堆坑。