自由、变革、分享!

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:

 

评分:0

我来说两句

TestFuture

TestFuture

赶上大学扩招,随便选了据说是最热门的个专业;毕业时期偶遇经济危机,误打误撞进入测试行业,时间久了发现这趟水还很深,只是鄙人仍在岸边。

我的栏目

日历

« 2024-05-05  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 46524
  • 日志数: 13
  • 建立时间: 2011-03-23
  • 更新时间: 2013-07-06

RSS订阅

Open Toolbar