2008/9/12 rochelle hsu <rjhome@gmail.com>
Test::Base 是一个 CPAN 模块:
http://search.cpan.org/perldoc?Test::Base
CPAN 上有不少文档。
我几年前刚接触时是通过看 Ingy dot net 的一个 talk 幻灯片学会的,呵呵。最简单的一个示例是:
# foo.t
use Test::Base;
plan tests => 1 * blocks();
sub add ($$) {
$_[0] + $_[1];
}
run {
my $block = shift;
my $name = $block->name;
#warn $name;
my $input = $block->input;
if (!defined $input) { die "No --- input specified for $name"; }
my $got = eval $input;
my $expected = $block->output;
chomp($expected);
like $got, $expected, "$name - answer okay";
};
__DATA__
=== TEST 1: add
--- input
1+2
--- output
3
=== TEST 2: sub
--- input: 1-2-3
--- output: -4
=== TEST 3: sub
--- input: 1-2-3
--- output: -4
我写了一个小脚本可以自动对这里的 foo.t 进行"格式化",比如序号重编,空行调整等等:
http://svn.openfoundry.org/openapi/trunk/bin/reindex
没有这个 reindex 脚本,使用 Test::Base 会感觉失败测试的准确定位有些困难,呵呵。毕竟失身测试的行号在这里已经没什么意义了,我们依赖于这里的 TEST 1, TEST 2 等编号来定位。
Test::Base 是一个很好的数据驱动的测试框架。我用它组织了 OpenResty 的测试集,可以以多种不同的方式(HTTP 或者进程内或者 mocking 方式)运行同一个测试集。我还用它结合 JavaScript::SpiderMonkey 对一些没有太多 DOM 操作的 .js 文件进行单元测试(比如 http://svn.openfoundry.org/openapi/trunk/demo/Onccf/t/01-pod2html.t ),用它对 GNU make 性质的外部程序进行测试(比如 http://svn.openfoundry.org/mdom/branches/gmake/t/gmake/sanity/simple.t ),用它对 Haskell 编写的编译器进行测试(比如 http://svn.openfoundry.org/openapi/trunk/haskell/t/view/emit-frags.t ),用它测试了我的除了 OpenResty 以外的多个 CPAN 模块,包括一个 Perl 6 正则引擎 Pugs::Compiler::Rule :))
Happy abusing Test::Base!
-agentzh
Abuse Test::Base to test everything请问有这个模块的介绍吗,个人比较感兴趣。
http://search.cpan.org/perldoc?Test::Base
CPAN 上有不少文档。
我几年前刚接触时是通过看 Ingy dot net 的一个 talk 幻灯片学会的,呵呵。最简单的一个示例是:
# foo.t
use Test::Base;
plan tests => 1 * blocks();
sub add ($$) {
$_[0] + $_[1];
}
run {
my $block = shift;
my $name = $block->name;
#warn $name;
my $input = $block->input;
if (!defined $input) { die "No --- input specified for $name"; }
my $got = eval $input;
my $expected = $block->output;
chomp($expected);
like $got, $expected, "$name - answer okay";
};
__DATA__
=== TEST 1: add
--- input
1+2
--- output
3
=== TEST 2: sub
--- input: 1-2-3
--- output: -4
=== TEST 3: sub
--- input: 1-2-3
--- output: -4
我写了一个小脚本可以自动对这里的 foo.t 进行"格式化",比如序号重编,空行调整等等:
http://svn.openfoundry.org/openapi/trunk/bin/reindex
没有这个 reindex 脚本,使用 Test::Base 会感觉失败测试的准确定位有些困难,呵呵。毕竟失身测试的行号在这里已经没什么意义了,我们依赖于这里的 TEST 1, TEST 2 等编号来定位。
Test::Base 是一个很好的数据驱动的测试框架。我用它组织了 OpenResty 的测试集,可以以多种不同的方式(HTTP 或者进程内或者 mocking 方式)运行同一个测试集。我还用它结合 JavaScript::SpiderMonkey 对一些没有太多 DOM 操作的 .js 文件进行单元测试(比如 http://svn.openfoundry.org/openapi/trunk/demo/Onccf/t/01-pod2html.t ),用它对 GNU make 性质的外部程序进行测试(比如 http://svn.openfoundry.org/mdom/branches/gmake/t/gmake/sanity/simple.t ),用它对 Haskell 编写的编译器进行测试(比如 http://svn.openfoundry.org/openapi/trunk/haskell/t/view/emit-frags.t ),用它测试了我的除了 OpenResty 以外的多个 CPAN 模块,包括一个 Perl 6 正则引擎 Pugs::Compiler::Rule :))
Happy abusing Test::Base!
-agentzh
没有评论:
发表评论