自由、变革、分享!
Junit4.5和Junit4.4与Springtest2.5.5结合一个小问题排查
上一篇 /
下一篇 2011-05-04 21:23:11
/ 个人分类:个人学习分享
今天使用Springtest2.5.5+Junit4.5(Eclipse 自带)测试一项目,在用例中涉及到一条数据库插入语句。运行一直报错,缺少类,但是一直不知道为什么。排查了许多点,最后找到是因为执行了这条数据库插入语句所致。从这点入手查找原因,以为是数据库源配置哪里出错。因为之前一个项目也是同样的测试架构,仅仅就在数据库配置文件有点不同。然后就把之前数据库配置文件拷过来,重新配置,运行后还是报错。
最后经过查找N多网站,说可能是因为Springtest2.5.5对Junit4.5以上版本的支持不够友好所致,接着我使用了Junit4.4版本。一运行,果然很清楚的把为什么运行不通过的原因清晰的输出,是因为执行时违反了数据表的主键。
以下为两个Junit版本的错误日志对比:
Junit 4.4 出现数据库表违反主键错误时,可以清楚的在Failure Trace窗口报下面错误日志。容易定位问题所在。
org.springframework.dao.DataIntegrityViolationException: StatementCallback; SQL [Insert into ****Table**** (parameter1,parameter2,parameter3, parameter4,create_TIME) values ('value1','value2','value3','value4',sysdate)]; ORA-00001: unique constraint (BLSS.PK_TBL_SYSTEM_CONFIG) violated ; nested exception is java.sql.SQLException: ORA-00001: unique constraint (*********) violated at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate (SQLErrorCodeSQLExceptionTranslator.java:292) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:407) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:522) at test.com.skymobi.ropmis.syncusrinfo.TestSyncUsrInfo.SetUpBefore(TestSyncUsrInfo.java:64) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) ………… |
Junit 4.5 出现数据库表违反主键错误时,只会在控制台出现下面的错误,如果没有在意数据库的设计结构,很难定位问题原因所在。
java.lang.NoClassDefFoundError: org/junit/Assume$AssumptionViolatedException at org.springframework.test.context.junit4.SpringMethodRoadie.runBefores(SpringMethodRoadie.java:278) at org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run (SpringMethodRoadie.java:332) at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:217) at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:197) at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:143) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:142) ………… |
那为啥两个版本的Junit打印的错误日志有差别呢?又查了些网站,最终的原因是在Junit4.5以上删除了Assume$AssumptionViolatedException这个内部类。虽是一个小问题,也花费了很多的时间去排查。但是收获还是蛮大的,主要是自己对这些测试方法生疏所致,开始没有好好利用网络的资源,希望在以后可以改善,提高效率。
收藏
举报
TAG: