2016-11-16 86 views
1

我有一個示例代碼,我有if聲明or運算符。在我的測試中,我檢查:這是Devel :: Cover code coverage中的一個錯誤嗎?

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來運行代碼覆蓋的開發封面。下面是我使用命令:

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

+0

那麼通過defined_values(undef,undef); ? – jmcneirney

+0

@toolic我的不好,標題是騙人的。我意識到這個錯誤不在Test :: More中,而是代碼覆蓋。 @jmcneirney條件'undef undef'與'undef defined'相同,因爲布爾運算符是短路運算符。 –

+0

你在cpan上使用最新版本的Devel :: Cover(1.23)嗎? – toolic

回答

4

是的,你應該報告在Devel::Cover的錯誤。如果我重新編碼您的子,我得到100%:

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

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

這個問題可能是相關的:https://github.com/pjcj/Devel--Cover/pull/165 – toolic