gpt4 book ai didi

java - 如何使用数据库单元初始化数据库(语句中未找到表)?

转载 作者:行者123 更新时间:2023-11-30 08:13:31 25 4
gpt4 key购买 nike

我有一个简单的 spring 项目并尝试使用 spring-dbunit做一些服务测试。我用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; bad SQL grammar [SELECT count() FROM car]; nested exception is java.sql.SQLException: Table not found in statement [SELECT count() FROM car]

我应该在运行测试之前初始化数据库吗?或者问题出在 @DatabaseSetup 上并且找不到 xml 文件?如何检查 hsqldb 是否启动并正常工作?

最佳答案

您需要提供一种方法来在运行单元测试之前创建架构。 DbUnit 的工作方式是在运行特定测试之前将数据库置于“已知状态”。

如果您安装了 RDBMS,则应该已经创建了数据库;但如果您使用的是内存数据库(对于这种情况更有可能),您必须提供 SQL 脚本(或其他方式),以便能够在内存数据库启动时为您创建架构。

看看here ,这可能会有所帮助。

关于java - 如何使用数据库单元初始化数据库(语句中未找到表)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30002286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com