【问题标题】:Mocking dataSource during Unit Testing在单元测试期间模拟数据源
【发布时间】:2011-08-08 18:14:06
【问题描述】:

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

但是transactionManager bean 实例化失败,因为使用给定 DB 凭据的 bean dataSource 无法实现连接。

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

【解决方案2】:

春季教程中对此进行了介绍。你必须在你的 DAO 中创建一个 InMemory 版本。

Look at 6.2 Fix the failing tests

【讨论】:

    【解决方案3】:

    使用dependency injection。您有两个标准且有据可查的选项来执行此操作。

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

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      相关资源
      最近更新 更多