1

私は単純な春のプロジェクトを持っており、いくつかのサービス テストを行うためにspring-dbunitを使用しようとしています。DBアクセスにはjdbcTemplateを使用しています。Bean の構成:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" c:dataSource-ref="dataSource"/>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:mem:springtestdbunit"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
    </bean>

テストクラスは次のようになります。

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"/it/tostao/sswa/sswai-test.xml"})
    @TestExecutionListeners({DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.class})
    public class CarServiceImplTest {

        Logger LOG = LoggerFactory.getLogger(CarServiceImplTest.class);

        @Autowired
        private JdbcTemplate jdbcTemplate;

        private CarService carService;

        @Before
        public void setUp() {
            carService = new CarServiceImpl(jdbcTemplate);
        }

        /**
         * Test cars counter.
         */
        @Test
        @DatabaseSetup("cars.xml")
        public void checkCounter() {
            int nbOfCarsInGarage = carService.sizeInGarage();//SELECT count(*) from car;
            LOG.info("No of cars = " + nbOfCarsInGarage);
            Assert.assertEquals(2, nbOfCarsInGarage);
        }    
}

Cars.xml は単純なデータ セットです。

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <car brand="BMW" model="E91" year="2006" doorsNumber="5" plate="XXX1234" />
    <car brand="Hyundai" model="Accent" year="2000" doorsNumber="4" plate="YYY333" />
</dataset>

構成でエラーが発生する必要がありますが、carService.sizeInGarage() を呼び出すと、次のメッセージが表示されます。

org.springframework.jdbc.BadSqlGrammarException: StatementCallback; 不適切な SQL 文法 [SELECT count( ) FROM car]; ネストされた例外は java.sql.SQLException: Table not found in statement [SELECT count( ) FROM car]

テストを実行する前にDBを初期化する必要がありますか、それとも@DatabaseSetupに問題があり、xmlファイルが見つかりませんか? hsqldb が起動して正しく動作していることを確認するにはどうすればよいですか?

4

1 に答える 1

1

単体テストを実行する前に、スキーマを作成する方法を提供する必要があります。DbUnit が機能する方法は、特定のテストを実行する前にデータベースを「既知の状態」にすることです。

RDBMS がインストールされている場合は、データベースが既に作成されているはずです。ただし、メモリ内データベースを使用している場合 (これが原因である可能性が高い)、メモリ内データベースの起動時にスキーマを作成できるように、SQL スクリプト (またはその他の方法) を提供する必要があります。

こちらをご覧ください。これが役立つ場合があります。

于 2015-05-02T12:35:04.657 に答える