2014-09-12 40 views
0

我正在通过一些框架来测试这个,从我可以告诉的是,似乎有很多折旧。大部分代码似乎都指向了这个SimpleJdbcTemplate类,该类从Spring 3.1开始折旧。在模拟数据库连接时有没有其他的选择?如何使用spring框架测试JDBC代码?

我的目标是能够编写不依赖数据库存在的测试用例。我正在使用Spring 3.1和Java 7.我给出的数据库是一个SQL数据库。

+2

Hi @Kubunto,您是否考虑过使用内存数据库进行测试? – gerardribas 2014-09-12 13:02:59

+0

这将如何工作@gerardribas? – Kubunto 2014-09-12 13:03:44

+0

@NathanHughes,令人遗憾的是,我所知道的是,它是一个SQL数据库,我无法以有意义的方式直接操作(例如创建一个新的或影响其结构) – Kubunto 2014-09-12 13:32:05

回答

0

您可以尝试类似H2http://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 

HSQLhttp://hsqldb.org/

db.dialect=org.hibernate.dialect.HSQLDialect 
+0

我已经得到了一个数据库,我不控制它是什么样的数据库@Suvasis – Kubunto 2014-09-12 13:16:49

0

有关使用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!

相关问题