我做了一些关于如何使用HyperSQL测试DAO层的研究,我发现了这个问题: https://softwareengineering.stackexchange.com/questions/219362/how-to-test-the-data-access-layer
如何导入DBConnection,因为我尝试使用hypersql jar并且它不起作用。在链接的问题中,我看到了db.url=jdbc:hsqldb:file:src/test/resources/testData;shutdown=true;
,但我不知道如何使用它。
答案 0 :(得分:1)
使用JDBC和Spring,在您的应用程序中,您将创建一个DataSource
对象,并使用该对象创建一个JdbcTemplate
对象,这是您用来运行JDBC查询的对象。与this示例类似。因此,为了使用HSql数据库,您需要更改用于设置DataSource
bean的值,但仅用于单元测试。
根据您使用Spring(注释,xml配置)的方式,有几种方法可以实现。您需要创建一个新的配置bean或配置xml文件,然后在单元测试中引用它。
对于XML,复制弹簧上下文xml文件,并将DataSource
值更改为:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:file:src/test/resources/testData;shutdown=true;"/>
<property name="username" value="SA"/>
<property name="password" value=""/>
然后,您需要在单元测试中引用此新的上下文配置。类似的东西:
@RunWith(SpringJUnit4ClassRunner.class)
// ApplicationContext will be loaded from "classpath:/test-config.xml"
@ContextConfiguration("/test-config.xml")
public class DAOTests {
@Autowired
private DatabaseDAO dao;
}
使用注释,您需要创建一个新的配置类(您应该已经创建了一个类,一个用@Configuration
注释的类)并返回相应的DataSource
。像这样:
@Bean
public DataSource hsqlDataSource(){
return DataSourceBuilder
.create()
.driverClassName("org.hsql.jdbcDriver")
.url("jdbc:hsqldb:file:src/test/resources/testData;shutdown=true;")
.username("SA")
.password("");
.build();
}
您可以为配置设置配置文件(使用@Profile("test")
注释),然后指定要在单元测试中使用的配置文件(@ActiveProfiles("test")
)。更多信息here。
或者,如果您只是尝试进行简单的DAO测试,则可以使用Spring EmbeddedDatabaseBuilder。有一个教程here。它为您设置内存数据库中的HSql(而不是基于文件的数据库),这对于设置/拆除非常方便。只需将bean添加到配置类中,如果Spring为您注入DataSource
,您的DAO应该选择它。以下示例取自here
@Bean
public DataSource dataSource() {
// no need shutdown, EmbeddedDatabaseFactoryBean will take care of this
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("db/setup_script.sql")
.build();
}
有一些Spring配置管理。我在这个答案中没有详细介绍它,但是查看一些例子,它将开始有意义。