代码之家  ›  专栏  ›  技术社区  ›  Vagnerr

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

  •  4
  • Vagnerr  · 技术社区  · 15 年前

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

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

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

    如果有一种方法可以使测试代码不那么脆弱,这样如果在实时代码中更改了filehandle名称,测试就不会失败?

    谢谢

    1 回复  |  直到 15 年前
        1
  •  9
  •   innaM    15 年前

    为什么不直接使用live代码提供的参数来打开?

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

    请记住,一旦您使用open的三参数形式,这将非常糟糕。如果有什么区别的话,这个问题提供了更多的证据,证明三个论点的版本是优越的。