spring+junit4时用Junit单元测试遇到的bug:java.lang.ExceptionInInitializerError

来源:互联网 发布:java工程师招聘 编辑:程序博客网 时间:2024/06/03 13:44

详细错误日志:

Java.lang.ExceptionInInitializerError

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.IllegalStateException: Failed to find class [org.junit.runners.model.MultipleFailureException]:SpringJUnit4ClassRunner requires JUnit 4.9 or higher.(这才是真正的原因)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:102)
... 18 more

具体描述:

由于第一次用spring+Junit4进行单元测试,对他们了解不够深入,出现这个bug时真的是手忙脚乱的,各种百度,各种尝试就是解决不了,网上好多方法都试了就是不行,现在想来不是网上的解决方法不行,而是我遇到的问题和他们不一样啊。网上说java.lang.ExceptionInInitializerError错误是在加载静态代码块时产生的等等等,但是在这个阶段真的有任何可能发生的错误。身为菜鸟的我根本无法一步步分析啊。

问题解决:

一个偶然的机会看到了错误日志的最后一行,突然明白了,原来是版本的问题,我用的是spring4.2.4.RELEASE和junit4.8,显然springtest需要最少Junit4.9,马上动手更换了Junit4.9,瞬间所有问题都没了。

感想收获:

1.建项目导包时一定要考虑版本兼容的问题,在这之前我遇到好几个因为版本出现的问题,自己选择框架版本时要多了解一些知识,不能随性而为,更不能天真的认为都用当时最新的就好。

2.有关错误日志,它真的是展示错误,解决问题的最好途径,无论何时都要认真的把错误日志看完,仔细分析,认真推敲,不要一遇到问题就拿着错误日志的第一行去网上百度,因为一句话通常只有很少的信息,网上找到的方法不一定真的是你的问题的解决方法啊。常常同一个错误,有可能是不同地方的问题引起的,要学会自己debug,确定根源仔细分析。

3.遇到一个实在解决不了的bug时,如果不是特别紧急,就先放一放,歇会儿,然后换个角度思考,也许就会轻松解决。不然人总是容易在一个死胡同里越走越深,最后,嗯,很崩溃的感觉。


转载自:http://blog.csdn.net/guanwangzhe521/article/details/51470241


增:如何更换junit的版本,由于myeclipse自带Junit,只需要进入到相应文件夹中替换其jar包,即可。


在项目中找到安装路径后,进入,将其原来的junit.jar替换成更高版本的即可


阅读全文
5 0