在Perl中为转换失败的测试函数转换数据类型?

时间:2015-05-15 11:53:56

标签: perl unit-testing

最低代码

use strict;
use warnings;
use v5.16;   
use Test::More tests => 2;

is_deeply(
[ [0, 0], [1, 0] ],
[ [0, 0], [1, 0] ],
'Intersects x-axis at (0, 0) and (1, 0)'
);   

is_deeply(
( [0, 0], [1, 0] ), 
( [0, 0], [1, 0] ),
'Intersects x-axis at (0, 0) and (1, 0)'
);

返回

ok 1 - Intersects x-axis at (0, 0) and (1, 0)
is_deeply() takes two or three args, you gave 5.
This usually means you passed an array or hash instead 
of a reference to it at test44.pl line 14
not ok 2
#   Failed test at test44.pl line 14.
# Looks like you failed 1 test of 2 run.

第一个代码以[[-,-],[-,-]]条目成功,但第二个代码以([-,-],[-,-])条目失败。 我的函数返回([-,-], [-,-])的所有内容,我想测试它是否在x轴上。

测试的args太多,这就是测试失败的原因。 因此可能需要进行一些转换。 但是,我的数据块非常大,因此没有重复数据因速度而不是一个好主意。

如何继续测试此类数据([-,-],[-,-])以有效地符合预期结果?

1 个答案:

答案 0 :(得分:3)

使用匿名数组,每个数组都只被解释为1个参数:

is_deeply(
          [ [0, 0], [1, 0] ],
          [ [0, 0], [1, 0] ],
          'Intersects x-axis at (0, 0) and (1, 0)'
);

原始代码中的括号不执行任何操作,列表被展平,即代码等同于

is_deeply( [0, 0], [1, 0], [0, 0], [1, 0],
           'Intersects x-axis at (0, 0) and (1, 0)'
);

is_deeply的5个参数。