在单元测试期间模拟dataSource

时间:2011-08-08 18:14:06

标签: java unit-testing spring-mvc mocking datasource

即使数据库已关闭,我也希望对我的数据库独立Web层控制器进行单元测试。

transactionManager bean实例化失败,因为具有给定数据库凭据的bean dataSource无法实现连接。

另外,我使用了@Transactional@AfterTransaction@BeforeTransaction注释,我不想删除。

有没有办法定义一个虚拟(或模拟)dataSource,我不需要提供任何数据库凭据,但仍然可以实例化我的transactionManager bean?

3 个答案:

答案 0 :(得分:3)

您所描述的更多是集成测试,而不是单元测试。对于单元测试,请不要启动Spring或事务管理器。只需实例化您的控制器并对其进行单元测试即可。对于集成测试,请考虑使用H2 in-memory database。 H2非常快(比Derby快得多),非常适合在需要数据库时进行测试。

答案 1 :(得分:0)

这在Spring教程中有所介绍。您必须创建DAO的In in Memory版本。

Look at 6.2 Fix the failing tests

答案 2 :(得分:0)

使用dependency injection。您有两个标准且记录良好的选项来执行此操作。

  1. 使用Google Guice等框架。这样做会有一些开销,但它会帮助你编写更好,更可测试的代码,并且有一些很酷的功能,比如范围,这对web层特别有用。
  2. 通过添加一个采用数据源参数或数据源setter方法的构造函数,在您自己的代码中实现DI。在生产中,您将传入/设置生产数据库,但在单元测试中,您可以使用模拟数据源来记录您的操作/事务。
相关问题