如何使用数据库单位INIT DB(在语句中找不到表)



我有一个简单的弹簧项目,并尝试使用Spring-Dbunit进行一些服务测试。我使用JDBCTEMPLATE进行数据库访问。豆配置:

<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>

我必须在配置中出错,但是当Call Carservice.SizeingArage()我看到消息:

org.springframework.jdbc.badsqlgrammarexception:statementCallback; 不良SQL语法[从汽车中选择计数()];嵌套异常是 java.sql.sqlexception:在语句中找不到表[select count() 从汽车]

我应该在运行测试之前init db还是@databasesetup和插座找到XML文件的问题?如何检查HSQLDB启动并正确工作?

您需要在运行单元测试之前提供一种创建模式的方法。DBunit的工作方式是在运行特定测试之前将数据库放在"已知状态"中。

如果您安装了RDBMS,则应该已经创建了数据库;但是,如果您使用的是内存数据库(更可能在此问题上),则必须提供一个SQL脚本(或其他方式)才能在启动内存数据库时为您创建架构。

在这里看看,这可能会有所帮助。

相关内容

  • 没有找到相关文章

最新更新