内容

名称

Test::Simple - 编写测试的基本实用工具。

概要

use Test::Simple tests => 1;

ok( $foo eq $bar, 'foo is bar' );

说明

**如果您不熟悉测试,请先阅读 Test::Tutorial **

这是一个非常简单、非常基本的模块,适用于编写适合 CPAN 模块和其他用途的测试。如果您希望进行更复杂的测试,请使用 Test::More 模块(此模块的替代品)。

Perl 测试的基本单元是 ok。对于您希望测试的每一项,您的程序将打印出“ok”或“not ok”以表示通过或失败。您可以使用 ok() 函数(见下文)执行此操作。

唯一的其他限制是您必须预先声明计划运行多少个测试。这是为了防止在测试期间出现严重错误并且您的测试程序中止或跳过测试等情况。您可以像这样操作

use Test::Simple tests => 23;

您必须有一个计划。

ok
ok( $foo eq $bar, $name );
ok( $foo eq $bar );

ok() 给定一个表达式(在本例中为 $foo eq $bar)。如果为真,则测试通过。如果为假,则测试未通过。就是这样。

ok() 打印 "ok" 或 "not ok" 以及一个测试编号(它会为你记录下来)。

# This produces "ok 1 - Hell not yet frozen over" (or not ok)
ok( get_temperature($hell) > 0, 'Hell not yet frozen over' );

如果你提供一个 $name,它将与 "ok/not ok" 一起打印,以便在测试失败时更容易找到你的测试(只需搜索名称)。它还使其他人更容易理解你的测试的用途。强烈建议你使用测试名称。

所有测试都在标量上下文中运行。所以这

ok( @stuff, 'I have some stuff' );

将执行你的意思(如果 stuff 为空则失败)

Test::Simple 将首先以 "1..M" 的形式打印运行的测试数(因此 "1..5" 表示你将运行 5 个测试)。这种奇怪的格式让 Test::Harness 知道你计划运行多少个测试,以防出现严重错误。

如果你的所有测试都通过,Test::Simple 将退出,退出码为零(这是正常的)。如果任何测试失败,它将退出,退出码为失败的测试数。如果你运行的测试少于(或多于)你计划的,缺少的(或多余的)测试将被视为失败。如果从未运行过任何测试,Test::Simple 将发出警告并退出,退出码为 255。如果测试在成功完成所有测试后死亡,它仍将被视为失败,并退出,退出码为 255。

因此退出码是...

0                   all tests successful
255                 test died or all passed but wrong # of tests run
any other number    how many failed (including missing or extras)

如果你失败的测试超过 254 个,它将报告为 254。

此模块绝不试图成为一个完整的测试系统。它只是让你入门。一旦你开始,建议你查看 Test::More

示例

下面是一个用于虚构的 Film 模块的简单 .t 文件示例。

use Test::Simple tests => 5;

use Film;  # What you're testing.

my $btaste = Film->new({ Title    => 'Bad Taste',
                         Director => 'Peter Jackson',
                         Rating   => 'R',
                         NumExplodingSheep => 1
                       });
ok( defined($btaste) && ref $btaste eq 'Film',     'new() works' );

ok( $btaste->Title      eq 'Bad Taste',     'Title() get'    );
ok( $btaste->Director   eq 'Peter Jackson', 'Director() get' );
ok( $btaste->Rating     eq 'R',             'Rating() get'   );
ok( $btaste->NumExplodingSheep == 1,        'NumExplodingSheep() get' );

它将产生如下输出

1..5
ok 1 - new() works
ok 2 - Title() get
ok 3 - Director() get
not ok 4 - Rating() get
#   Failed test 'Rating() get'
#   in t/film.t at line 14.
ok 5 - NumExplodingSheep() get
# Looks like you failed 1 tests of 5

表明 Film::Rating() 方法已损坏。

注意事项

Test::Simple 在其退出码中最多只报告 254 个失败。如果这是一个问题,你可能有一个巨大的测试脚本。将其拆分为多个文件。(否则,责怪 Unix 人员使用无符号短整数作为退出状态)。

由于 VMS 的退出码与宇宙中的其他部分大不相同,并且 perl 对它们进行了可怕的破坏,这让我很头疼,它在 VMS 上的工作方式如下。

0     SS$_NORMAL        all tests successful
4     SS$_ABORT         something went wrong

不幸的是,我无法进一步区分。

说明

Test::Simple 明确经过测试,可一直追溯到 perl 5.6.0。

Test::Simple 在 perl 5.8.1 及更高版本中是线程安全的。

历史

这个模块是在一个晚上与 Tony Bowden 在他的厨房里谈论我在新测试模块中编写一些非常复杂的特性时遇到的问题时构思的。他观察到,主要的问题不是处理这些边缘情况,而是人们根本讨厌编写测试。需要的是一个非常简单的模块,它可以消除测试中的所有艰苦工作,并且非常、非常容易学习。Paul Johnson 同时也有这个想法(不幸的是,他不在 Tony 的厨房里)。这就是它。

另请参阅

Test::More

更多测试函数!一旦你超越了 Test::Simple,请查看 Test::More。Test::Simple 与 Test::More 100% 向前兼容(即你可以在程序中使用 Test::More 代替 Test::Simple,并且仍然可以正常工作)。

Test::More 的另请参阅中查找更多测试模块。

作者

Tony Bowden 和 Paul Johnson 的想法,Michael G Schwern <[email protected]> 的代码,Calvin Klein 的衣柜。

维护者

Chad Granum <[email protected]>

版权

版权所有 2001-2008 Michael G Schwern <[email protected]>。

本程序是免费软件;你可以在与 Perl 自身相同的条款下重新分发或修改它。

请参阅 https://perldotcom.perl5.cn/perl/misc/Artistic.html