我正在编写用于检查C代码的perl测试用例。这里我多次调用C文件 使用不同的值并检查它是否返回1。 我的perl文件看起来像这样:
my $variableCheck1,$variableCheck2,$variableCheck3.....
.
.
.
.
if(($variableCheck1 == 1) && ($variableCheck2 == 1) && ($variableCheck3 == 1).....)
{
print "Test cases are passed";
}
问题是有很多检查变量。 有没有办法让我可以在循环中运行所有检查变量,同时将数字附加到check变量这样的
for($i=1 ; $i < 12 ; $i++)
{
if($variableCheck_$i == 1)
{
print "Test cases are passed";
}
}
追加为每个循环变量名称根据值$ i变化:variableCheck1,variableCheck2。
答案 0 :(得分:5)
最好使用一个实际的测试库,例如Test::More,它可以让你知道所有测试是否通过,以及提供许多有用的测试功能。然后,迭代各种参数值并运行测试非常简单。下面是一个示例,它将各种参数传递给echo
命令,然后将结果传递给计算器程序bc
,以查看该添加是否正常工作:
<强> test_add.t 强>
#!/usr/bin/env perl
use warnings;
use strict;
use Test::More;
for my $aa ( 1..3 ) {
for my $bb ( 1..3 ) {
my $expected = $aa + $bb;
my $prog = "echo $aa + $bb | bc";
my $output = `$prog`;
ok( $expected == $output, "$aa + $bb = $expected" );
}
}
done_testing();
运行测试文件:
prove -v test_add.t
ok 1 - 1 + 1 = 2
ok 2 - 1 + 2 = 3
ok 3 - 1 + 3 = 4
ok 4 - 2 + 1 = 3
ok 5 - 2 + 2 = 4
ok 6 - 2 + 3 = 5
ok 7 - 3 + 1 = 4
ok 8 - 3 + 2 = 5
ok 9 - 3 + 3 = 6
1..9
ok
ll tests successful.
Files=1, Tests=9, 0 wallclock secs ( 0.05 usr 0.01 sys + 0.04 cusr 0.00 csys = 0.10 CPU)
Result: PASS
答案 1 :(得分:3)
每次使用一长串编号变量时,该作业的工具都不是而不是来动态计算变量名称 - 这称为符号引用,它是&#39令人讨厌的
您应该做的是使用变量列表。
my @variablecheck = ( 1, 2, 1, 3, );
foreach my $value ( @variablecheck ) {
print "Test passed\n" if $value == 1;
}
如果你真的开始使用符号命名 - read this再继续 - 它是从1998年开始的,但它仍然是一个坏主意。您可以将哈希用于类似目的 - 如果您拥有任意名称,它们会很好 - 但对于顺序数值,数组是作业的工具。
使用测试库也是如此,例如TAP::Harness
或Test::More