2011-10-25 25 views
0

我们正在尝试解决测试工具上的一些问题,并且遇到了特定测试的问题,这些测试基本上测试了创建实体的功能,并进行了一些处理并将其存储在数据库(是的,CRUD中的C)。Fitnesse:测试没有正确地进行清理

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

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

要尝试和解决这个问题,我们正在一个可轮询的JDBC删除:

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

所以问题来了:

  • 当一个JDBC事务COMMITED?

在上面的代码中,更新是在同一个事务上执行,还是为每个迭代的do-while循环创建一个新的事务? (我倾向于认为他们将在同一交易中执行,因为java.sql.Connection持有commit,rollback,etc方法)。

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

在此先感谢

回答

1

我看不出有什么毛病你的循环开始。你在某个地方打电话给statement.close()吧?我认为SUT是在另一个线程或远程?你确定你的删除标准与输入相匹配吗?你可以在另一个进程中检查数据库以查看创建是否将其传送到数据库?

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