【问题标题】:Integration test for spring jdbcspring jdbc的集成测试
【发布时间】:2018-04-02 12:21:27
【问题描述】:

假设我们有一个服务层:

@Service
public class MyServiceImpl implements MyService {

    @Autowired
    private MyDAO myDAO;

    @Transactional
    public void myMethod(SomeObject someObject) {
       myDAO.insertIntoMyDb(someObject);

    }
}

假设 myDAO 使用 spring jdbc:

@Repository
public class MyDAOImpl implements MyDAO {

    @Autowired
    private NamedParameterJdbcTemplate jdbcTemplate;

    @Override
    public void insertIntoMyDb(SomeObject object) {

        // some code before this where we get query and param

        int numberOfRowsUpdated = jdbcTemplate.update(query,param);

        if(numberOfRowsUpdated != 1)
            throw new Exception("Error while inserting a record in database. Actual records inserted : " + numberOfRowsUpdated);
    }


}

我想写 2 个测试。

第一个测试将只检查我的 dao 层。我想在这里进行 jdbc 调用,获取数据并进行验证。我不想嘲笑他们。

第二个测试是集成测试。我希望我的服务层调用 Dao 层。请注意,有交易。现在这会给我来自 DAO 的数据。同样,DAO 必须连接到 db 才能获取数据。

我正在使用弹簧靴。我的数据库属性存在于 applicationITest.properties 文件中。

如何进行这两项测试?我必须使用的正确注释是什么?谁能举个例子?

【问题讨论】:

  • 需要澄清一下:a) 您是在测试服务层还是 DAO 层的事务行为? b) 你想测试 JDBC 代码吗?
  • 两者。我想要2个测试。一个检查 (service+dao) 另一个检查 dao。我不想通过模拟检查独立服务层。事情变得复杂,因为我们在服务层也有事务
  • @BreakingBenjamin 您所问的问题已包含在 SPring 文档中。阅读它,并尝试一些东西。在不模拟 DAO 层的情况下测试服务层没有多大意义:测试会更慢、更难编写、更难维护,而且你的服务除了委托给 DAO 之外什么都不做。如果你想测试 Spring 事务是否正常工作,那并没有什么帮助:Spring 已经测试过了。
  • @JBNizet 上面的代码只是一个示例。服务层有很多业务逻辑,调用不止一个 Dao。另外,我阅读了 spring 文档,但不是很清楚。因此,问题。
  • 尝试一些东西,在提问之前进行实验。然后,如果卡住了,回到这里,带着你尝试过的东西,以及你遇到的确切问题。当心:你可能会通过这样做学到东西。

标签: java spring spring-mvc spring-boot spring-jdbc


【解决方案1】:

a) 默认情况下,只要您使用 @Transactional 注释您的测试类,就会发生回滚。关于Test-managed transactions的文档。

示例测试类:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyTestConfig.class)
@Transactional
public class MyClassTest {
   //..

   @Test
   public void myTest() {
      //..
   }

   //..
}

b) 是的,您可以使用 @Commit(在 Spring 4.2 中添加)测试注释强制提交。 Here's the documentation.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-14
    • 2018-07-27
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多