gpt4 book ai didi

perl - 如何覆盖我的 $dbh 上的提交以进行测试?

转载 作者:行者123 更新时间:2023-11-28 20:04:19 25 4
gpt4 key购买 nike

我正在尝试修改我的测试,以便在完成时回滚所有数据库工作。但是,似乎在我正在测试的代码中的某处 $dbh->commit 被显式调用。有没有办法覆盖 DBI::db 对象的提交方法以完全关闭提交?

我试过使用 Test::MockObject::Extends,但这似乎削弱了 $dbh:

    $dbh = ConnectToDB();
$dbh = Test::MockObject::Extends->new( $dbh );
$dbh->mock( 'commit', sub { warn("Caught you committing.") } );

稍后当我尝试使用 $dbh 做一些工作时,我得到:

Can't locate object method "fetchrow_array" via package "T::MO::::st"

看起来我最终用模拟的 $dbh 创建的 $sth 设置不正确。有没有人有一个很好的方法来完全关闭特定 $dbh 的提交?

我要连接的数据库是 Oracle,物有所值。

更新

事实证明,我们在一个与 Axeman 的回答非常相似的方法中覆盖了 &DBI::db::commit,但提交实际上是由于在运行期间调用的存储过程中的流氓提交而发生的我的测试。

最佳答案

单元测试根本不应该真正与真实的数据库对话。一种常见的方法是使用 DBD::Mock 将数据库驱动程序换成假的驱动程序。 , DBD::CSVSQLite ,它允许您使用为每个测试套件定制的隔离测试数据,这些数据可以在每次运行后删除和/或保存以供分析。

关于perl - 如何覆盖我的 $dbh 上的提交以进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4200116/

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