如何使用perl中的数据输入创建测试

时间:2013-01-09 22:49:45

标签: perl testing

我已经开始编写一个可用于汇总数据的模块。我是新手测试,虽然我已经阅读了我能找到的东西并且用Google搜索了但是我无法找到关于如何最好地测试方法的建议,以及需要一些输入数据才能理解的东西(让我说我会使用大约100行制表符分隔文本文件)。

我是否应该在分发中包含文本文件?我已经检查了Text :: CSV,这就是它在那里完成的方式。

有什么建议吗?

非常感谢

1 个答案:

答案 0 :(得分:2)

我建议结合使用Test::More作为您的测试框架并嵌入内联数据。

Test::More是Perl中的标准测试工具包;几乎所有你可能会发现的测试工具都使用它。它配备了许多方便的内置测试功能。

通常,您通过将期望值与子例程或工具实际给出的值进行比较来进行测试。最常见的方法是使用is例程进行直接比较。它的格式如下:

is($got, $expected, $test_name);

例如,假设我们制作了POW功能,并希望确保它正常工作:

sub pow { my ($n, $p) = @_;  return $n ** $p; }

我们会用以下方式检查:

is( pow(2, 3), 8, "2^3 is 8" );
is( pow(2, 4), 16, "2^4 is 16" );
is( pow(3, 3), 27, "3^3 is 27" );

然后,它只是以一种对您有用的格式获取所需的数据。使用Heredocs可以使用测试函数调用内联加载小数据:

my $test1 = <<'END_DATA1';
... (your data here
END_DATA1

my $test2 = <<'END_DATA2';
... (your second dataset here
END_DATA2

或者,如果您需要检查多个部分的大数据集,可以考虑将其全部放在__DATA__块中:

while (my $line = <DATA>) { ... } # read from the DATA handle

# ... your script above here; everything below __DATA__ is read from the handle
__DATA__  
... ( your data set here )

例如,如果你想确保你的子程序正确读取一行,它可能是这样的:

use strict;
use warnings;
use Test::More;

use Your::Lib;  # load your library with your routines in it

use Test::More tests => 5; # how many checks you will perform, in case it dies

my $lib = your_lib_function(\*DATA);  # say, it loads from a file handle maybe?

is( $lib->key1(), 'value', "Key 1 was read correctly.");
is( $lib->key2(), 'value2', "Key 2 was read correctly.");
is( $lib->key3(), 'value3', "Key 3 was read correctly.");
is( $lib->key4(), 'value4', "Key 4 was read correctly.");
is( $lib->key5(), 'value5', "Key 5 was read correctly.");

__DATA__
{
    "Key" : "value",
    "Key2" : "value2",
    "Key3" : "value3",
    "Key4" : "value4",
    "Key5" : "value5",
}

查看Test::More以获取有关此框架如何工作的更多详细信息。祝好运! :)