该文是解决IllegalState Failed to load ApplicationContext异常中的一种。
背景介绍
- spring-web-4.3.6.RELEASE
- Junit v4.12
- h2 v1.4.192
- Run As单元测试类,全部测试用例可以通过
- mvn test部分测试类下面所有的测试用例都报错
mvn test报错信息如下:
1 | testMethod(io.github.eericzeng.StudentTest) Time elapsed: 0 sec <<< ERROR! |
异常排查
由异常信息getJdbcSQLException/ApplicationContext推断出配置信息有问题,而且是关于数据库的异常,getJdbcSQLException是h2抛出的,说明h2在初始化就存在问题。配置单元测试log4j日志,log4j日志关键信息如下:
1 | Caused by: org.h2.jdbc.JdbcSQLException: Table "student" already exists; SQL statement: |
执行SQL创建数据表失败,说明建表语句被执行了多次。检查SQL脚本发现,脚本中只有创建数据表的语句,并没有DROP语句,所以每次执行测试用例时都会失败。
解决办法
根据本次异常排查情况,在CREATE TABLE前添加如下SQL语句:
1 | DROP TABLE IF EXISTS 'student'; |