为什么我可以为Spring项目运行JUnit测试,但不是主方法?

时间:2010-05-21 20:55:30

标签: java eclipse spring maven-2 datasource

我正在使用JDBC连接MySQL以获得一个小应用程序。为了在不改变真实数据库的情况下进行测试,我在内存中使用HSQL进行JUnit测试。

我正在使用Spring进行DI和DAO。以下是我配置HSQL数据源的方法

<bean id="mockDataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:mem:mockSeo"/>
    <property name="username" value="sa"/>
</bean>

这适用于使用模拟DB的JUnit测试。但是当我尝试运行main方法时,我发现以下错误:

Error creating bean with name 'mockDataSource' defined in class path resource [beans.xml]: 
Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: 
Could not load JDBC driver class [org.hsqldb.jdbcDriver]

我正在运行Eclipse,而我正在使用Maven插件。是否有理由将其用作测试,而不是main()?我知道main方法本身不是问题,因为如果我从Spring配置文件中删除对HSQL DataSource的所有引用,它就会起作用。

1 个答案:

答案 0 :(得分:3)

当您将应用程序作为“Java应用程序”运行时,m2eclipse不会将测试范围的依赖项添加到类路径中。您需要将hsql依赖项的范围更改为“compile”(默认值)才能实现。