Fitnesse:测试没有正确清理

时间:2011-10-25 12:34:31

标签: java jdbc transactions fitnesse

我们正在尝试修复测试工具上的一些问题,并且遇到特定测试的问题,基本上测试创建实体的功能,进行一些处理并将其存储在数据库中(是的,CRUD中的C)

在fitnesse测试的tearDown部分,我们对该记录执行delete语句。但是,没有任何内容被删除。

我们怀疑这可能是因为在SUT提交事务之前执行了tearDown。因此,没有什么可以删除。

为了尝试解决这个问题,我们正在制作一个可轮询的jdbc delete:

java.sql.Statement statement;
/*creates a statement*/
do{
   recordsDeleted = statement.executeUpdate("delete...");
   Thread.sleep(INTERVAL);
}while(recordsDeleted == 0);

所以问题出现了:

  • 什么时候提交jdbc事务?

在上面的代码中,更新是在同一个事务上执行的,还是会为do-while循环的每次迭代创建一个新的事务? (我倾向于认为它们将在同一个交易中执行,因为java.sql.Connection包含commitrollbacketc方法。

  • 您能为此问题提出另一种解决方案吗?我认为这很常见,但我的队友没有在网上找到任何解决方案,只是“轮询直到删除或超时”的建议。

提前致谢

1 个答案:

答案 0 :(得分:1)

我最初没有看到你的循环有什么问题。你正在某处调用statement.close()吗?我假设SUT在另一个线程或远程?您确定删除条件与输入匹配吗?您是否可以在另一个进程中检查数据库以查看创建是否将其发送到数据库?

就交易而言,它取决于数据库,但通常默认情况下没有交易。通常,启用自动提交,以便立即执行和提交每个单独的语句。如果想要启用事务,则需要禁用自动提交,然后调用databaseConnection.setSavePoint()。调用commit()时将提交事务。如果连接已关闭(或rollback()已调用),则回滚事务。