我做了一些关于如何用HyperSQL测试DAO层的研究,我发现了这个问题:https://softwareengineering.stackexchange.com/questions/219362/how-to-test-the-data-access-layer
如何导入DBConnection,因为我尝试使用hypersql,但它没有工作。在这个链接中,我看到了这个db.url=jdbc:hsqldb:file:src/test/resources/testData;shutdown=true;,但是我不知道如何使用它。
发布于 2016-01-11 10:36:42
使用JDBC和Spring,您将在应用程序中创建一个DataSource对象,并使用该对象创建一个JdbcTemplate对象,这就是您在运行JDBC查询时使用的对象。类似于这示例。因此,为了使用HSql数据库,您需要更改用于设置DataSource bean的值,但只用于单元测试。
根据您如何使用Spring (注释、xml配置),有几种方法可以做到这一点。您需要创建一个新的配置bean或配置xml文件,然后在单元测试中引用它。
对于XML,复制spring上下文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"))中使用的配置文件。更多信息,这里。
或者,如果您只是想做一个简单的DAO测试,可以使用Spring。有一个教程这里。它在内存数据库(相对于基于文件的HSql )中设置了一个,这对于设置/拆卸非常方便。只要将bean添加到您的配置类中,如果Spring为您注入了DataSource,那么DAO就会得到它。下面的示例摘自这里
@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配置管理有点问题。我还没有在这个答案中详细介绍它,但是看看几个例子,它就开始有意义了。
https://stackoverflow.com/questions/34717698
复制相似问题