我有一个使用 Spring JDBC 模板与 MySQL 数据库通信的 Java 应用程序。在我的一个测试中,我想模拟一个在集成测试中不存在的表,但是由于各种原因,我实际上无法在我们的测试数据库中临时删除/重新创建或重命名该表。
我也不想模拟特定的 DAO 方法调用,它会命中抛出错误的表,以防我们继续使用其他方法。我想做一些事情,比如在 sql 进入数据库之前拦截它,并用假名替换表名(如果存在)——或者其他具有相同效果的东西。
以测试驱动开发为赢!
我有一个使用 Spring JDBC 模板与 MySQL 数据库通信的 Java 应用程序。在我的一个测试中,我想模拟一个在集成测试中不存在的表,但是由于各种原因,我实际上无法在我们的测试数据库中临时删除/重新创建或重命名该表。
我也不想模拟特定的 DAO 方法调用,它会命中抛出错误的表,以防我们继续使用其他方法。我想做一些事情,比如在 sql 进入数据库之前拦截它,并用假名替换表名(如果存在)——或者其他具有相同效果的东西。
以测试驱动开发为赢!
您应该使用 EasyMock 进行此类测试。有多种方法可以让方法抛出您指定的任何异常。如果你不能使用它,你就没有有效地分离你的应用层。
查看:http ://www.easymock.org/EasyMock2_2_Documentation.html ,在“使用异常”标题下
如果拦截是您想要的,那么使用方面可能是一种解决方案。
您必须创建一个切入点拦截,例如,对特定方法的调用“在它进入数据库之前发送 sql”。
然后您可以创建before/around 建议,您可以在其中操作数据(“用虚假名称替换表名”),然后再继续调用