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

标签 perl testing

我已经开始编写可用于汇总数据的模块。我是测试新手,虽然我已经阅读了我能找到的内容并四处搜索,但我找不到关于如何最好地测试需要一些输入数据才能有意义的测试方法和潜艇的建议(假设我将使用大约 100 行制表符分隔的文本文件)。

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

有什么建议吗?

非常感谢

最佳答案

我建议结合使用 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__ block 中:

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有关此框架如何工作的更多详细信息。祝你好运! :)

关于perl - 如何在 perl 中使用数据输入创建测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14247924/

相关文章:

xml - 如何将 XML::Simple 与可能具有一个或多个子元素的 XML 标记一起使用?

perl - 结合 GStreamer、AnyEvent 和 EV (perl)

Perl Mechanize 单击单选按钮

go - 如何在测试中期待JSON

python - 在 Flask 中设置用于测试的数据库

perl - 在未压缩的 PDF 中进行大量内联编辑

perl - 使用 Test::WWW::Selenium 或其他方式检测操作系统对话框

javascript - 测试 jquery 点击回调

php - Zend 单元测试与数据库

c# - 如何在 StepArgumentTransformation 中使用 REGEX 查找带前缀的字符串