这是Devel :: Cover代码覆盖率中的错误吗?

时间:2016-11-16 17:40:19

标签: perl unit-testing code-coverage

我有一个示例代码,其中if运算符为or语句。在我的测试中,我检查:

0X
10
11

当我检查代码覆盖率时,它显示67%的条件。我在这里遗漏了什么,或者这是Devel:Cover

中的错误

这是我的代码:

use strict;
use diagnostics;
use warnings;
use Test::More tests => 3;


sub defined_values{
    my ($a,$b) = @_;

    if( not defined $a or not defined $b ){
        return 'not defined';
    }

    return 'defined';
}

test_defined_values_aNotDefined_returns_notDefined();
test_defined_values_bNotDefined_returns_notDefined();
test_defined_values_abDefined_returns_Defined();

sub test_defined_values_aNotDefined_returns_notDefined{
    is(defined_values(undef, 'b'), 'not defined', 'test_defined_values_aNotDefined_returns_notDefined');
}

sub test_defined_values_bNotDefined_returns_notDefined{
    is(defined_values('a', undef), 'not defined', 'test_defined_values_bNotDefined_returns_notDefined');    
}

sub test_defined_values_abDefined_returns_Defined{
    is(defined_values('a', 'b'), 'defined', 'test_defined_values_abDefined_returns_Defined');    
}

顺便说一句,实际的子程序在包中,这是在测试文件中写的示例代码。

我使用Jenkins运行devel cover以进行代码覆盖。以下是我使用的命令:

cd .\usr

if exist cover_db\NUL call cover -delete
if exist test_output\NUL rmdir /S /Q test_output
del /S t\*.tap

set HARNESS_PERL_SWITCHES=-MDevel::Cover
set PERL_TEST_HARNESS_DUMP_TAP=.\test_output
call prove -I .\lib --formatter=TAP::Formatter::Jenkins -l t

for /f "tokens=*" %%A in ('forfiles /S /P t /C "cmd /c if @isdir==TRUE echo @relpath"') do (
    set "file=%%~A"
    setlocal enableDelayedExpansion
    call prove -I .\lib --formatter=TAP::Formatter::Jenkins -l t!file:~1!
    endlocal
)

cover -report html

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:4)

是的,您应该将其报告为Devel::Cover中的错误。如果我重新编码你的子,我得到100%:

sub defined_values{
    my ($a,$b) = @_;

    if( defined $a and defined $b ){
        return 'defined';
    }
    return 'not defined';
}