CPAN 上可用的测试模块概述

CPAN 上可用的测试模块概述

CPAN 上充满了可以帮助您测试代码的优秀模块。以下是一些可用的模块列表,这样您就不必重新发明轮子了。

如果您要添加模块到列表中,请发送电子邮件至 andy@petdance.com

通用测试模块

Test::AtRuntime

程序运行时的断言式测试。

Test::Benchmark

比较两个函数以确保一个比另一个更快。

    use Test::Benchmark;

    is_faster(-10, sub {...}, sub {...}, "this is faster than that")

Test::Class

xUnit 风格的测试,与基于 Test::Builder 的模块(大多数其他测试模块)配合良好。这意味着它可以相对容易地集成到现有设置中。

Test::Cmd

通过外部接口而不是内部来测试脚本/程序。

Test::Data

包含 4 个子模块,提供许多函数来测试数组、哈希、标量和函数的内容。这些使得测试各种边界和边缘情况变得容易,而无需编写太多代码。

Test::Debugger

将测试脚本的跟踪信息输出到文件,以便在发生错误时进行查看。

Test::Deep

对数据结构进行极其灵活和强大的深度比较。非常适合测试给定结构不仅等于理想模型,而且还用于确定它们是否相似。也适用于检查轻微嵌套的结构(例如,地址簿查询的响应是否具有格式良好的记录)。

Test::Differences

测试长字符串和数据结构,提供可读的输出(与使用 Test::Moreis 函数测试长字符串不同)。

Test::Extreme

另一个 xUnit 风格的测试框架。非常易于使用。能够输出 xUnit 风格和传统的 Perl 风格。

Test::FIT

提供 CGI 接口来编写和运行测试套件。

Test::File

测试文件属性(空、特定大小、可读、可执行、可写等)。

Test::Inline

允许您将测试嵌入程序文件中的 POD 中,从而允许您在编写文档时进行测试,或在编写代码时进行测试,或两者兼而有之。一个副作用是您的示例代码可以是测试代码。

Test::LectroTest

LectroTest 是 Perl 的一种自动的基于规范的测试工具。该项目灵感来自 Koen Claessen 和 John Hughes 为 Haskell 编程语言开发的 QuickCheck。

测试假设的平方函数

    Property {
          ##[ x <- Int #]##
          square( $x ) == $x * $x;
    }, name => "Finding $x's square";

Test::LongString

测试长字符串,允许轻松地查看不平等或不匹配的位置。

Test::ManyParams

组合子程序参数测试。允许您测试函数的所有参数组合。

Test::MockModule

轻松覆盖模块中的子程序以进行单元测试。

Test::MockObject

允许您创建以特定方式响应方法的对象,从而允许您测试自己的代码如何处理具有此类返回值的对象。

Test::More

最常用的测试模块。适用于大多数测试用例的适当功能集,现在已成为 Perl 的标准(从 5.6.2 和 5.8.0 开始)。

Test::Reporter

模块允许您将 make test 结果发送到 CPAN 测试人员。包括方便的 cpantest 程序,使命令行报告变得容易。

Test::Simple

基本的测试模块,您很少会单独使用它,因为 Test::More 完全取代了它。

Test::SimpleUnit

围绕标准测试函数的单元测试包装函数。允许您指定设置函数,以及在发生错误时运行的拆卸函数。

Test::Smoke

用于测试 Perl 本身发行版的框架。一般公众通常不会使用它。

Test::Unit

Perl 的 JUnit 测试。

Test::Verbose

对测试文件运行详细测试。现在似乎被 Test::Harness 中包含的 prove 程序所取代。

数据库测试模块

DBD::Mock

DBD::Mock 是一个符合 DBI 标准的数据库驱动程序,允许您准备和执行 SQL 语句,播种结果集,并检查所有调用的结果。

来自 SYNOPSIS 的示例

    use DBI;

    # ...connect as normal, using 'Mock' as your driver name
    my $dbh = DBI->connect( 'DBI:Mock:', '', '' )
                  || die "Cannot create handle: $DBI::errstr\n";

    # ...create a statement handle as normal and execute with parameters
    my $sth = $dbh->prepare( 'SELECT this, that FROM foo WHERE id = ?' );
    $sth->execute( 15 );

    # Now query the statement handle as to what has been done with it
    my $params = $sth->{mock_params};
    print "Used statement: ", $sth->{mock_statement}, "\n",
          "Bound parameters: ", join( ', ', @{ $params } ), "\n";

Test::DatabaseRow

给定一个 DBI 数据库句柄,可以测试数据库是否包含具有特定行的表。对于测试数据库修改是否成功很有用。

    # SQL-based test
    row_ok( sql   => "SELECT * FROM contacts WHERE cid = '123'",
            tests => [ name => "trelane" ],
            label => "contact 123's name is trelane");

    # test with shortcuts
    row_ok( table => "contacts",
            where => [ cid => 123 ],
            tests => [ name => "trelane" ],
            label => "contact 123's name is trelane");

特定于数据的测试模块

Test::Env

测试环境是否具有适当的数据。

Test::Files

测试文件和目录是否具有特定内容。

Test::ISBN

根据Business::ISBN验证 ISBN 和 ISBN 部分。

Test::Mail

测试电子邮件是否正确发送和接收。

Test::XML

用于测试 XML 语法等效性的辅助函数,即使字符串本身不同。

Web 测试模块

Apache::Test

允许您运行针对基于 Apache 的软件的测试。还可以让您在 Apache 内部运行测试。不限于 mod_perl。

Test::HTML::Content

测试 HTML 是否具有(或没有)特定的链接、文本、标签、注释等。对于测试网站非常有用(另请参见WWW::MechanizeTest:HTML::Lint)。

Test::HTML::Lint

检查 HTML 是否根据HTML::Lint格式良好。

Test::HTML::Tidy

检查 HTML 是否根据HTML::Tidy格式良好。

Test::HTTPStatus

确保 HTTP 响应具有适当的值。

Test::WWW::Mechanize

WWW::Mechanize 的子类,具有用于自动化测试的便捷方法。

模块测试模块

Test::Builder::Tester

基于Test::Builder对其他Test::模块运行测试。

Test::Distribution

对模块执行基本 Kwalitee 检查:检查它们是否具有格式良好的 POD、是否编译、是否都定义了相同的$VERSION、是否在Makefile.PL 中具有先决条件以及是否存在一些标准文件。

Test::Exception

测试代码片段是否按预期死亡或不死亡,以及是否出现正确的错误。

Test::Manifest

以特定的非字母顺序执行您的测试,而无需使用数字前缀命名它们。

Test::NoWarnings

测试以确保您的测试没有发出任何警告。

Test::Pod

检查给定的 POD 或 Perl 文件的语法有效性。还有一个函数可以让你轻松地检查发行版中的所有文件。

Test::Pod::Coverage

检查给定的 POD 或 Perl 文件的语法有效性。还有一个函数可以让你轻松地检查发行版中的所有文件。

Test::Portability::Files

检查发行版中文件名称的可移植性。测试使用perlport 中列出的建议,第“文件和文件系统”部分。

Test::Prereq

检查您的Makefile.PL 是否指定了正确的先决条件。

Test::Signature

验证由Module::Signature创建的模块签名是否正确。

Test::Tester

基于Test::Builder对其他Test::模块运行测试。

Test::Version

检查模块文件是否具有正确的版本信息。

Test::Warn

用于测试可能引发警告的代码的便捷模块。测试函数捕获任何警告,因此您可以根据正则表达式检查它们。

例如,此代码检查WWW::Mechanizewarn() 方法是否确实引发了警告。

    my $m = WWW::Mechanize->new;
    isa_ok( $m, 'WWW::Mechanize' );

    warning_like {
        $m->warn( "Something bad" );
    } qr/Something bad.+line \d+/, 
        "Passes the message, and includes the line number";

Test::Without::Module

允许您故意从程序中隐藏模块,即使它们已安装。这主要用于测试在未安装特定依赖模块时具有回退的模块。

贡献者

以下人员帮助贡献了此页面:Andy Lester、Dominic Mitchell Philipe 'BooK' Bruhat、Chris Winters、Per Christian Nødtved 以及已故的伟大 Iain Truskett。