"/data/monitor/"; 在实际操作中,常数将 从不更改但我希望能够在我的单元测试中对其进行-6ren">
gpt4 book ai didi

unit-testing - 有没有办法在你的单元测试中覆盖 Perl "use constant"?

转载 作者:行者123 更新时间:2023-12-03 17:44:43 24 4
gpt4 key购买 nike

我有一个 Perl 模块,我声明了一些常量:

use constant BASE_PATH => "/data/monitor/";

在实际操作中,常数将 从不更改但我希望能够在我的单元测试中对其进行修改,例如将其设置为 ~/project/testdata/ .有没有办法做到这一点而不必使用全局可变变量?

我可以使用 Test::MockObjectconstant ?

最佳答案

当使用常量时,它们被实现为常量函数,行为如下:

use subs 'BASE_PATH';
sub BASE_PATH () {"/data/monitor/"}

程序中对 BASE_PATH 的任何使用都是内联的,因此无法修改。

为了达到类似的效果,您可以手动使用 subs pragma(使 BASE_PATH 表现为内置函数)并将 BASE_PATH 声明为标准函数:
use subs 'BASE_PATH';
sub BASE_PATH {"/data/monitor/"}

print "BASE_PATH is ".BASE_PATH."\n";

*BASE_PATH = sub {"/new/path"};
print "BASE_PATH is ".BASE_PATH."\n";

尽管您为什么要这样做,但我不太确定。

关于unit-testing - 有没有办法在你的单元测试中覆盖 Perl "use constant"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1069816/

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