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

perl – 测试::更多不知道测试是否死亡 – 所以我该如何测试?

发布时间:2020-12-15 21:54:38 所属栏目:大数据 来源:网络整理
导读:我正在收集一堆子程序,这些子程序对于我的一堆脚本来说是常见的. (我应该早点这样做,但是从继承的脚本开始.)我正在使用Test :: More和Module :: Build在非常有用的示例 here上建模我的工作. 所有从文件读取或写入的子程序都包含一行open()或die“errmsg”.我
我正在收集一堆子程序,这些子程序对于我的一堆脚本来说是常见的. (我应该早点这样做,但是从继承的脚本开始.)我正在使用Test :: More和Module :: Build在非常有用的示例 here上建模我的工作.

所有从文件读取或写入的子程序都包含一行open()或die“errmsg”.我正在为模块编写测试并遇到了这个问题.其中一个子程序检查路径是否指向某个东西,在失败时死亡.在继承的脚本中,子例程如下所示:

sub checkExist {
  my ($type,$path) = @_;
  if ($type eq 'd') {
    if (! -d $path) {
      warn("dir not found: $pathn");
      die $pathNotFound;
    }
  }
  elsif ($type eq 'f') {
    if (! -f $path) {
      warn("file not found: $pathn");
      die $pathNotFound;
    }
    elsif (! -s $path) {
      warn("empty file: $pathn");
      die $emptyFile;
    }
  }
}

现在,我正在使用以下行测试它:

is(HomeBrew::IO::checkExist('f',$0),'',"can checkExist find file $0 ?");

除非我选择一个不存在的路径,否则测试脚本会死,但测试成功,产生以下输出:

# Looks like your test exited with 2 just after 5.
Dubious,test returned 2 (wstat 512,0x200)
All 5 subtests passed

我更喜欢这是一个失败的测试(而不是一个可疑的传递),但由于这是遗留代码,我也希望这个子程序在失败时停止执行.该怎么办?在函数上编写测试这么简单是愚蠢的吗?

我已经编写了一个checkExist2函数,我将来会在成功时返回undef,否则会出现非零错误(所以如果checkExist2()在别处,我可以写死).其他建议不保持checkExist的功能是值得欢迎的.

解决方法

测试代码是否存在或正确错误的正确方法是使用 Test::Exception.您可以将此测试包装在其他测试用例中,因为它只需要一个coderef:
use Test::More;
use Test::Exception;

lives_ok {
    is(HomeBrew::IO::checkExist('f',"can checkExist find file $0 ?")
} '...and code does not die';

(编辑:李大同)

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

    推荐文章
      热点阅读