6

私が取り組んでいる Java プロジェクトでは、単体テスト用に次の設定を行いました。

  • Spring Test MVC を使用して@RunWith(SpringJUnit4ClassRunner.class)単体テスト@WebAppConfigurationを実行し、アプリケーションをテストするためにMockMvcインスタンスを作成しwebAppContextSetup(webApplicationContext)ます。
  • インメモリ HSQLDB をセットアップするための Hibernate 構成があります。すべてのテーブルは @Entity クラスに基づいて作成されます。
  • hibernate.hbm2ddl.import_filesHibernate 構成で、SQL ステートメントを含むファイルをロードしimport.sqlて (インメモリ) データベースにデータを入力するようにプロパティを設定しています。

今、私はこれらすべての上記の作業を確認しました:

  • テストは、インメモリ DB から正常に挿入/取得できます。
  • の SQL ステートメントimport.sqlが実行され、さまざまなテストで確認されます。

今の問題:私が追加したステートメントで発生したエラーimport.sqlは、どこにも報告されていないようです。また、エラーが発生したことを示す兆候もまったくありません。代わりに、後続のステートメントは実行されません。(テストで確認済みです。)

これらのエラー報告される方法や場所はありますか? このための追加の Hibernate プロパティはありますか?

休止状態のテスト構成からの抜粋:

    <bean id="sessionFactory" name="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.archive.autodetection">class,hbm</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</prop>
                <prop key="hibernate.connection.username">sa</prop>
                <prop key="hibernate.connection.password"></prop>
                <prop key="hibernate.connection.url">jdbc:hsqldb:mem:myschema</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
                <prop key="hibernate.hbm2ddl.import_files">configuration/test/import.sql</prop>
                <prop key="hibernate.hbm2ddl.import_files_sql_extractor">org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor</prop>
                <!-- when using type="yes_no" for booleans, the line below allow booleans in HQL expressions: -->
                <prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop>
            </props>
        </property>
    </bean>
4

3 に答える 3

1

あなたの質問に対する答えではありませんが、テスト DB の作成を処理する別の方法です。

jdbcSpring には、Spring コンテキストの起動時にデータベースに初期データを事前入力できるようにする、XML 名前空間があります。また、SQL のエラーも正常に報告されます。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jdbc="http://www.springframework.org/schema/jdbc"
   xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/jdbc
       http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

    <jdbc:initialize-database data-source="dataSource">
        <jdbc:script location="org/mytestproject/schema-drop-hsqldb.sql" />
        <jdbc:script location="org/mytestproject/schema-hsqldb.sql" />
        <jdbc:script location="org/mytestproject/data-hsqldb.sql" />
    </jdbc:initialize-database>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="validationQuery" value="${jdbc.validationQuery}"/>
    </bean>
</beans>
于 2015-04-20T20:35:42.120 に答える