- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用 MyBatis (3.0.5) 作为我们的或映射工具(对此我没有任何意见!)。
我创建了一个 Response
对象,通过 MyBatis,映射到我们的 [responses]
数据库表(我们使用 PostgreSQL)。
实际上,我们使用的ormapping结构如下:
ResponseMapper
方法的 ResponseDAO
的具体实现;我们使用 Spring 将此类的实例注入(inject)到我们的应用程序中因此,要将新的 [responses]
记录插入 PostgreSQL,调用组件的代码如下所示:
@Autowired
private ResponseDAO response;
public void doStuff()
{
int action = getAction();
response.setAction(action);
response.insert();
}
这个设置对我们来说效果很好。不过,我现在正在尝试为 ResponseDAOImpl 类编写一组 JUnit 测试,并且我想确保它正确执行对 PostgreSQL 数据库的查询。
据我所知,没有办法“模拟”整个数据库。因此,我唯一的选择(似乎)是让测试方法执行查询,检查是否成功,然后无论如何将其回滚。
MyBatis 似乎不支持这种回滚功能。我发现this在 Old Nabble 上的 mybatis-user
邮件列表中发帖,但发帖者使用的是 Guice,他/她的问题似乎更多是关于通过 Guice 回滚交易。
如果 MyBatis 不支持事务/回滚(支持吗?!?!),那么似乎我唯一的替代就是 PostgreSQL-JDBC 驱动程序支持这些。我想我可以尝试配置我的测试方法,以便它们运行 ResponseDAO.insert() 方法,然后手动尝试直接通过驱动程序回滚事务(无 MyBatis)。
SO 有这方面的经验吗?代码示例?尖端?最佳实践?提前致谢!
最佳答案
MyBatis 允许在使用“SqlSession”时进行回滚,问题在于您使用了 spring 依赖注入(inject)部分,它会在方法完成时自动提交事务。
您有几个选择,其中
注入(inject)依赖项的模拟。有一些很棒的库可以帮助解决这个问题。喜欢Mockito , here is a good question on Spring Mockito stuff 。这将测试您的 java 中的业务逻辑,但不会测试您的实际查询。
提交您的查询,并在测试运行后删除您的数据。这是我们采用的方法,因为它也测试我们的数据库。显然,您需要数据库的测试实例,而有些人没有。
您可以尝试为在 MyBatis Spring Integration 中执行自动提交的类提供自己的测试绑定(bind),并覆盖那里的行为,以便在测试环境中该行为是回滚查询而不是提交。 Guice 集成中使用了类似的方法,描述为 here .
关于java - 回滚 ORMapper 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8580260/
我们使用 MyBatis (3.0.5) 作为我们的或映射工具(对此我没有任何意见!)。 我创建了一个 Response 对象,通过 MyBatis,映射到我们的 [responses] 数据库表(我
我是一名优秀的程序员,十分优秀!