Perl:测试的定义是什么?

问这个问题我感到有点惭愧,但我很好奇.我最近写了一个脚本(没有在模块中组织代码),它读取商店的日志文件并将信息保存到数据库.

例如,我写了这样的东西(通过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核心功能可以帮到我.脚本(未模块化)无法正确测试?

问候

解决方法

一个重要的区别是:如果有人要编辑(bugfix或新功能)你的’script.pl’文件,那么在当前状态下运行你的’script.t’文件会提供有关新脚本状态的任何有用信息. PL’?对于这种情况,您必须包含或使用.pl文件,而不是有选择地复制/粘贴摘录.

在最好的情况下,您可以模块化地设计软件并计划测试.如果你想在事后测试一个单片脚本,我想你可以在exit()之后编写一个包含你的主程序的测试脚本,并且至少要测试子程序…

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...