Vag*_*err 5 perl unit-testing constants mocking compile-time-constant
我有一个Perl模块,我已经声明了一些常量:
use constant BASE_PATH => "/data/monitor/";
Run Code Online (Sandbox Code Playgroud)
在实时操作中,常量永远不会改变,但我希望能够在单元测试中修改它,例如将其设置为〜/ project/testdata /.有没有办法做到这一点,而不必使用"非常数"?
我可以在constant.pm上使用Test :: MockObject吗?
当使用常量时,它们被实现为常量函数,其行为类似于:
use subs 'BASE_PATH';
sub BASE_PATH () {"/data/monitor/"}
Run Code Online (Sandbox Code Playgroud)
程序中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";
Run Code Online (Sandbox Code Playgroud)
虽然你为什么要这样做我不太确定.
| 归档时间: |
|
| 查看次数: |
2277 次 |
| 最近记录: |