2

我有一个使用 Spring JDBC 模板与 MySQL 数据库通信的 Java 应用程序。在我的一个测试中,我想模拟一个在集成测试中不存在的表,但是由于各种原因,我实际上无法在我们的测试数据库中临时删除/重新创建或重命名该表。

我也不想模拟特定的 DAO 方法调用,它会命中抛出错误的表,以防我们继续使用其他方法。我想做一些事情,比如在 sql 进入数据库之前拦截它,并用假名替换表名(如果存在)——或者其他具有相同效果的东西。

以测试驱动开发为赢!

4

2 回答 2

1

您应该使用 EasyMock 进行此类测试。有多种方法可以让方法抛出您指定的任何异常。如果你不能使用它,你就没有有效地分离你的应用层。

查看:http ://www.easymock.org/EasyMock2_2_Documentation.html ,在“使用异常”标题下

于 2012-04-20T15:55:14.280 回答
1

如果拦截是您想要的,那么使用方面可能是一种解决方案。

  • 您必须创建一个切入点拦截,例如,对特定方法的调用“在它进入数据库之前发送 sql”。

  • 然后您可以创建before/around 建议,您可以在其中操作数据(“用虚假名称替换表名”),然后再继续调用

请参阅以及使用 Spring 的 Aspect Oriented Programming

于 2012-04-22T08:38:38.497 回答