我正在使用HSQLDB进行单元测试。 有没有一种很好的方法来模拟各种数据库问题,如约束违规,ORM层异常或直接数据库中断,而使用HSQLDB W/O明确模拟ORM层?如何使用hsqdb模拟db中断?
1
A
回答
0
对于停电,您可以尝试不启动数据库。对于其他所有我更喜欢嘲笑ORM层的东西。
顺便说一句:当使用HSQLDB时,它实际上不再是单元测试。这更多的是一个集成测试。
0
看来这很难做到,因为内存数据库并不真正变成断开或相似的状态。虽然有几种选择适合您的情况:
要伪造约束违规,请执行一些打破约束条件的操作。例如。对于唯一约束,预先添加重复行,对于外键约束,在被测系统不期望它时删除引用的外部行等。
ORM层异常很棘手。在数据库中做野生事物可能是在这里得到一些反应的最简单方法(例如删除所有表),但我认为你会努力重现许多可能的问题。
由于数据库中断数据库实际上总是可以访问,所以DB中断并不是真正的直接伪造。解决的办法是进入被测系统和数据库之间的层,并打破那里的连接,是可能的。目前,我正在做这个使用Spring和JDBC模板的Java项目,以及我与嘲弄DB超时和中断分别为:
DriverManagerDataSource dataSource =
((DriverManagerDataSource)jdbcTemplate.getDataSource());
// 192.0.2.1 is in the TEST-NET range, guaranteed
// to never exist, so this always times out
dataSource.setUrl("jdbc:hsqldb:http://192.0.2.1/testdb");
// Subsequent operations then timeout
和
// Port 9 is reserved for 'discard', so is almost certainly unconnectable
// and very very unlikely to ever actually return valid data even if not.
dataSource.setUrl("jdbc:hsqldb:http://localhost:9/testdb");
// Subsequent operations immediately fail to connect
请注意,这两个将打破新的连接,据我所知,没有办法打破所有当前打开的连接。如果你可以得到一个参考,那么close()应该非常接近于模拟飞行中断线。
此外,正如boutta指出的,这是一个集成测试,而不是单元测试。除了进行这些集成测试之外,您可能还希望单元测试您在此处与DB交谈的代码,并完全为此模拟出您的数据库接口(例如,您的JDBC模板)。这实际上使许多事情变得更容易,特别是模拟特定的异常情况。
相关问题
- 1. 如何模拟C/C++中的中断?
- 2. 如何使用com0com null-modem模拟器模拟故障/电缆中断
- 3. 使用PHPLinq - 柯比db模拟
- 4. MSDN模拟中断行为
- 5. Arduino模拟引脚中断
- 6. 如何模拟套接字断开?
- 7. 如何在PIC18调试模式下模拟中断?
- 8. 如何在模拟库中使用MockMvc?
- 9. 如何在django中使用模拟?
- 10. 使用EF模拟树状结构,使用db
- 11. 如何处理Mongoose DB连接中断
- 12. 如何在Spring Boot中模拟db连接以进行测试?
- 13. 模拟iPhone模拟器中的电话中断
- 14. 如何在mvc DB中使用模型第一种模式?
- 15. 如何使用PHP,MySQL DB和JavaScript模拟对等通信通道?
- 16. 如何使用Nodejs模拟用户
- 17. 如何使用Swift模拟#可用?
- 18. 模拟器不断崩溃
- 19. 如何使用模拟库来模拟Django的ForeignKey值?
- 20. 如何模拟使用Android模拟器旋转设备?
- 21. 如何断言使用ScalaTest和ScalaMock永远不会调用模拟方法?
- 22. 如何模拟代码中的Delphi断点?
- 23. 如何模拟Linux上的中断风暴或活锁?
- 24. 如何模拟java套接字连接中断?
- 25. 如何触发或模拟键盘中断?
- 26. angularjs e2e用模拟http测试断言
- 27. 模拟不断调用实际功能
- 28. 模拟键盘与织物中断
- 29. android.hardware.telephony在模拟器上中断安装
- 30. 使用nock来模拟多个沙发db请求