我正在通过一些框架来测试这个,从我可以告诉的是,似乎有很多折旧。大部分代码似乎都指向了这个SimpleJdbcTemplate类,该类从Spring 3.1开始折旧。在模拟数据库连接时有没有其他的选择?如何使用spring框架测试JDBC代码?
我的目标是能够编写不依赖数据库存在的测试用例。我正在使用Spring 3.1和Java 7.我给出的数据库是一个SQL数据库。
我正在通过一些框架来测试这个,从我可以告诉的是,似乎有很多折旧。大部分代码似乎都指向了这个SimpleJdbcTemplate类,该类从Spring 3.1开始折旧。在模拟数据库连接时有没有其他的选择?如何使用spring框架测试JDBC代码?
我的目标是能够编写不依赖数据库存在的测试用例。我正在使用Spring 3.1和Java 7.我给出的数据库是一个SQL数据库。
您可以尝试类似H2。 http://www.h2database.com/html/main.html
db.driverClassName=org.h2.Driver
db.url=jdbc:h2:mem:test
db.username=
db.password=
db.dialect=org.hibernate.dialect.H2Dialect
或HSQL。 http://hsqldb.org/
db.dialect=org.hibernate.dialect.HSQLDialect
我已经得到了一个数据库,我不控制它是什么样的数据库@Suvasis – Kubunto 2014-09-12 13:16:49
有关使用Spring JDBC来实现我的DAO层加速测试中,我使用的内存数据库。
如果您正在使用maven这些都是你所需要的相关性:
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<scope>test</scope>
</dependency>
第一个是嵌入式数据库,第二个是春季测试罐。
那么,我会介绍我如何做测试和配置。
MyApplicationStandaloneConfiguration.java
@Configuration
@Profile("local")
@ComponentScan("cat.mypackages")
public class MyApplicationStandaloneConfiguration {
@Bean
public DataSource myApplicationDataSource() throws NamingException {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
dataSource.setUrl("jdbc:hsqldb:mem:test");
dataSource.setUsername("sa");
dataSource.setPassword("");
ResourceDatabasePopulator pop = new ResourceDatabasePopulator();
pop.addScript(new ClassPathResource("sql/schema.sql"));
pop.addScript(new ClassPathResource("sql/one_table_inserts.sql"));
pop.addScript(new ClassPathResource("sql/another_table_inserts.sql"));
return dataSource;
}
}
注意,我这个注释作为@profile地方,这意味着我可以创造不同的环境中多个配置文件,例如,假设你想运行的集成测试针对您的开发/ qa/uat数据库。
看到我正在加载schema.sql和其他一些sql脚本。这包含我创建表的模式以及我希望在我的测试用例中使用的插入。
然后很容易,创建测试用例这样的:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyApplicationStandaloneConfiguration.class)
@ActiveProfiles("local")
public class MyDaoTestCase {
@Autowired
private MyDao dao;
@Test
public void testFindId() {
SomeDto dto = dao.findById(123);
assertNotNull(dto);
...
}
}
希望它hepls!
Hi @Kubunto,您是否考虑过使用内存数据库进行测试? – gerardribas 2014-09-12 13:02:59
这将如何工作@gerardribas? – Kubunto 2014-09-12 13:03:44
@NathanHughes,令人遗憾的是,我所知道的是,它是一个SQL数据库,我无法以有意义的方式直接操作(例如创建一个新的或影响其结构) – Kubunto 2014-09-12 13:32:05