我已经开始编写一个可用于汇总数据的模块。我是新手测试,虽然我已经阅读了我能找到的东西并且用Google搜索了但是我无法找到关于如何最好地测试方法的建议,以及需要一些输入数据才能理解的东西(让我说我会使用大约100行制表符分隔文本文件)。
我是否应该在分发中包含文本文件?我已经检查了Text :: CSV,这就是它在那里完成的方式。
有什么建议吗?
非常感谢
答案 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
以获取有关此框架如何工作的更多详细信息。祝好运! :)