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

perl – 使用TAP线束中的函数而不是测试文件

发布时间:2020-12-16 06:17:42 所属栏目:大数据 来源:网络整理
导读:这是我目前使用TAP的测试工具: use TAP::Harness;my $harness = TAP::Harness-new();$harness-runtests(['sequential.t']); 我想避免使用测试文件并直接调用Perl函数.就像是 : my %args = ( exec = run_all_tests(),);$harness-runtests(); 解决方法 主要
这是我目前使用TAP的测试工具:

use TAP::Harness;
my $harness = TAP::Harness->new();
$harness->runtests(['sequential.t']);

我想避免使用测试文件并直接调用Perl函数.就像是 :

my %args = (
  exec => run_all_tests(),);
$harness->runtests();

解决方法

主要问题是所有现代 test模块都在引擎盖下使用 Test::Builder.
Test::Builder本身假设您只需要在文件中进行一组测试.
因此,我们需要为每组测试重置单例(Test :: More-> builder-> reset).

use strict;
use warnings;

use TAP::Harness;
use Test::More;

my %tests = (
  a => sub{
    plan tests => 4;
    ok 5==5,'5 == 5';
    is 5,"5",'is 5,5';
    like 5,qr'^d$','5 =~ /^d$/';
    is 5,4,4';
  },b => sub{
    plan tests => 3;
    ok !0;
    ok !0;
    ok !0;
  },c => sub{
    plan 'no_plan';
    ok !0;
    done_testing;
  },d => sub{
    ok !0;
    done_testing;
  },);

sub runner{
  my($harness,$test) = @_;

  my $builder = Test::More->builder;

  # reset the Test::Builder object for every "file"
  $builder->reset;
  $builder->{Indent} = ''; # may not be needed

  # collect the output into $out
  $builder->output(my($out));     # STDOUT
  $builder->failure_output($out); # STDERR
  $builder->todo_output($out);    # STDOUT

  # run the test
  $tests{$test}->();

  # the output ( needs at least one newline )
  return $out;
}

my $harness = TAP::Harness->new(
  {
    exec => &;runner,verbosity => 1,}
);

$harness->runtests(sort keys %tests);
a .. 
1..4
ok 1 - 5 == 5
ok 2 - is 5,5
ok 3 - 5 =~ /^d$/
not ok 4 - is 5,4

#   Failed test 'is 5,4'
#   at test.pl line 13.
#          got: '5'
#     expected: '4'
Failed 1/4 subtests 
b .. 
1..3
ok 1
ok 2
ok 3
ok
c .. 
ok 1
1..1
ok
d .. 
ok 1
1..1
ok

Test Summary Report
-------------------
a (Wstat: 0 Tests: 4 Failed: 1)
  Failed test:  4
Files=4,Tests=9,0 wallclock secs ( 0.02 usr +  0.00 sys =  0.02 CPU)
Result: FAIL

(编辑:李大同)

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

    推荐文章
      热点阅读