gpt4 book ai didi

java - Fitnesse:测试未正确进行清理

转载 作者:行者123 更新时间:2023-12-01 15:42:07 24 4
gpt4 key购买 nike

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

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

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

为了尝试解决此问题,我们正在进行可轮询的 jdbc 删除:

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 方法)。

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

最佳答案

我最初没有发现你的循环有任何问题。您正在某处调用 statement.close() 吗?我假设 SUT 位于另一个线程中或者是远程的?您确定您的删除条件与输入相符吗?您可以在另一个进程中检查数据库以查看创建是否正在进入数据库吗?

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

关于java - Fitnesse:测试未正确进行清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com