问这个问题我觉得有点羞耻,但我很好奇。我最近编写了一个脚本(没有在模块中组织代码),它读取商店的日志文件并将信息保存到数据库中。
例如,我写了这样的东西(通过 Richard Huxton):
while (<$infile>) {
if (/item_id:(\d+)\s*,\s*sold/) {
my $item_id = $1;
$item_id_sold_times{$item_id}++;
}
}
my @matched_items_ids = keys %item_id_sold_times;
my $owner_ids =
Store::Model::Map::ItemOwnerMap->fetch_by_keys( \@matched_item_ids )
->entry();
for my $owner_id (@$owner_ids) {
$item_id_owner_map{$owner_id}++;
}
比如说,这个脚本叫做 script.pl。在测试文件时,我制作了一个文件script.t,不得不在script.t中重复一些script.pl块。复制粘贴相关代码部分后,我会进行如下确认:
is( $item_id_sold_times{1}, 1, "Number of sold items of item 1" );
is( $item_id_owner_map{3}, 8, "Number of sold items for owner 3" );
等等等等。
但有人指出,我写的不是测试。这是一个确认脚本。一个好的测试包括用模块编写代码,编写一个脚本来启动模块中的方法,并为模块编写一个测试。
这让我想到了软件工程中最广泛使用的测试的定义是什么。也许你们中的一些甚至测试过 Perl 核心功能的人可以帮助我。无法正确测试脚本(未模块化)?
问候