加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何覆盖Perl的open()函数,但使用相同的文件句柄进行测试?

发布时间:2020-12-15 23:21:33 所属栏目:大数据 来源:网络整理
导读:我目前正在为一些遗留代码添加一些单元测试,我发现自己需要覆盖一个open函数.实时代码看起来像这样. if ( !open( F,$filetoopen) ){ # do stuff with F} 我想要做的是确保“F”包含我从测试中提供的文件句柄,而不是它认为它的开头. 我的.t文件中有以下代码…
我目前正在为一些遗留代码添加一些单元测试,我发现自己需要覆盖一个open函数.实时代码看起来像这样.

if ( !open( F,$filetoopen) ){
    # do stuff with <F>
}

我想要做的是确保“F”包含我从测试中提供的文件句柄,而不是它认为它的开头.

我的.t文件中有以下代码…

BEGIN {
    *CORE::GLOBAL::open = sub { open(F,$testfiletoopen); };
};

…它确实有效,测试中的代码完成了从我的测试文件读取.但是,只要我使用与测试中的代码相同的文件句柄名称“F”,它就会继续工作.

如果有办法使这个测试代码不那么脆弱,那么如果在实时代码中更改了文件句柄名称,那么测试不会失败?

谢谢

解决方法

为什么不简单地使用实时代码提供的参数来打开?

BEGIN {
    *CORE::GLOBAL::open = sub { open $_[0],$newfilename };
};

请记住,只要您使用三参数形式的open,这将会非常可怕.如果有的话,这个问题提供了更多的证据证明三参数版本是优越的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读