【发布时间】:2020-11-12 07:29:32
【问题描述】:
我有一个示例代码,其中有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 来运行开发覆盖以进行代码覆盖。以下是我使用的命令:
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
【问题讨论】:
-
如何传递定义的值(undef,undef); ?
-
@toolic 我的错,标题是骗人的。我意识到这个错误不在于 Test::More,而是代码覆盖率。 @jmcneirney 条件
undef undef与undef defined相同,因为布尔运算符是短路运算符。 -
BTW 避免使用
$a和$b。这些是神奇的全局变量,总是被sort声明和使用。如果您在未声明的情况下使用它们,您将不会收到来自strict的警告。
标签: perl unit-testing code-coverage