如何覆盖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,这将会非常可怕.如果有的话,这个问题提供了更多的证据证明三参数版本是优越的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |