在测试独立的Perl脚本时覆盖变量

在测试独立的Perl脚本时覆盖变量,第1张

概述我现在需要维护一个Perl脚本.它充满了不良做法,包括在整个脚本中使用(和重用)全局变量.在我开始更改脚本之前,我打算尝试编写一些测试脚本,这样我就可以获得良好的回归基础.为此,我将使用此 page中描述的方法. 我开始编写单个子程序的测试.我把这行放在我正在测试的脚本的顶部附近: return 1 if ( caller() ); 那样,在我的测试脚本中,我可以 require 'script_ 我现在需要维护一个Perl脚本.它充满了不良做法,包括在整个脚本中使用(和重用)全局变量.在我开始更改脚本之前,我打算尝试编写一些测试脚本,这样我就可以获得良好的回归基础.为此,我将使用此 page中描述的方法.

我开始编写单个子程序的测试.我把这行放在我正在测试的脚本的顶部附近:

return 1 if ( caller() );

那样,在我的测试脚本中,我可以

require 'script_to_test.pl';

它不会执行整个脚本.

我要测试的第一个子程序大量使用了整个脚本中设置的全局变量.我的想法是尝试在我的测试脚本中覆盖这些变量,如下所示:

require_ok('script_to_test.pl');$var_from_other_script = 'OverrIDe Value';ok( sub_from_other_script() );

不幸的是(对我来说),我正在测试的脚本在顶部有一个巨大的“我的”块,它声明了脚本中使用的所有变量.这可以防止我的测试脚本看到/更改我正在运行测试的脚本中的变量.

我玩过Exporter,Test :: Mock ……以及其他一些模块,但看起来我想要能够改变任何变量,我必须以某种方式修改其他脚本.

我的目标是不改变其他脚本,但要运行一些好的测试,所以当我开始更改其他脚本时,我可以确保我没有破坏任何东西.该脚本大约有10,000行(主块中有3,000行),所以我担心如果我开始更改内容,我会影响代码的其他部分,因此拥有一个好的测试套件会有所帮助.

这可能吗?调用脚本可以修改用“my”声明的另一个脚本中的变量吗?

并且请不要像“从头开始重新编写脚本”等答案,等等.这可能是最好的解决方案,但它没有回答我的问题,我们没有时间/资源重写.

解决方法 如果你想保持变量词法(如果有用它们构建的闭包)你可以使用模块 PadWalker来解决.

在旧代码中包含类似的内容:

package somepackage;use PaDWalker qw/peek_my/;my $x = 1;# big my block declaration...our $lexpad = peek_my 0;

然后在你的测试代码中:

${ $somepackage::lexpad->{'$x'} } = 2;
总结

以上是内存溢出为你收集整理的在测试独立的Perl脚本时覆盖变量全部内容,希望文章能够帮你解决在测试独立的Perl脚本时覆盖变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1260408.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存