作成した DAO を単体テスト (JUnit) しようとしています。フレームワークとしてSpringを使用しています.DAO(JdbcPackageDAO)はSimpleJdbcDaoSupportを拡張しています。テスト クラス (JdbcPackageDAOTest) は、AbstractTransactionalDataSourceSpringContextTests を拡張します。次のように configLocations をオーバーライドしました。
protected String[] getConfigLocations(){
return new String[] {"classpath:company/dc/test-context.xml"};
}
私の test-context.xml ファイルは次のように定義されています。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="dataPackageDao" class="company.data.dao.JdbcPackageDAO">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost"/>
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>company/data/dao/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
バックエンドとして HSQL を使用しています。スタンドアロン モードで実行しています。私が選んだ IDE は eclipse です。クラスを JUnit テストとして実行すると、エラーが発生します (以下)。なぜそれが起こっているのか、私には手がかりがありません。hsql.jar は、Eclipse によるビルド パスにあります。
org.springframework.transaction.CannotCreateTransactionException: トランザクションの JDBC 接続を開けませんでした。ネストされた例外は java.sql.SQLException です: jdbc:hsqldb:hsql://localhost に適したドライバーが見つかりません org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:219) で org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:377) で org.springframework.test.AbstractTransactionalSpringContextTests.startNewTransaction(AbstractTransactionalSpringContextTests.java:387) で org.springframework.test.AbstractTransactionalSpringContextTests.onSetUp(AbstractTransactionalSpringContextTests.java:217) で org.springframework.test.AbstractSingleSpringContextTests.setUp(AbstractSingleSpringContextTests.java:101) で junit.framework.TestCase.runBare (TestCase.java:128) で org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:76) で junit.framework.TestResult$1.protect(TestResult.java:106) で junit.framework.TestResult.runProtected (TestResult.java:124) で junit.framework.TestResult.run(TestResult.java:109) で junit.framework.TestCase.run(TestCase.java:120) で junit.framework.TestSuite.runTest(TestSuite.java:230) で junit.framework.TestSuite.run(TestSuite.java:225) で org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run (JUnit3TestReference.java:130) で org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) で org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:460) で org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:673) で org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:386) で org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:196) で 原因: java.sql.SQLException: jdbc:hsqldb:hsql://localhost に適したドライバーが見つかりません java.sql.DriverManager.getConnection で (不明なソース) java.sql.DriverManager.getConnection で (不明なソース) org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:291)で org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:277) で org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:259) で org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:241) で org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:182) で ... 18以上