CPAN 上充满了可以帮助您测试代码的优秀模块。以下是一些可用的模块列表,这样您就不必重新发明轮子了。
如果您要添加模块到列表中,请发送电子邮件至 andy@petdance.com
。
程序运行时的断言式测试。
比较两个函数以确保一个比另一个更快。
use Test::Benchmark; is_faster(-10, sub {...}, sub {...}, "this is faster than that")
xUnit 风格的测试,与基于 Test::Builder
的模块(大多数其他测试模块)配合良好。这意味着它可以相对容易地集成到现有设置中。
通过外部接口而不是内部来测试脚本/程序。
包含 4 个子模块,提供许多函数来测试数组、哈希、标量和函数的内容。这些使得测试各种边界和边缘情况变得容易,而无需编写太多代码。
将测试脚本的跟踪信息输出到文件,以便在发生错误时进行查看。
对数据结构进行极其灵活和强大的深度比较。非常适合测试给定结构不仅等于理想模型,而且还用于确定它们是否相似。也适用于检查轻微嵌套的结构(例如,地址簿查询的响应是否具有格式良好的记录)。
测试长字符串和数据结构,提供可读的输出(与使用 Test::More
的 is
函数测试长字符串不同)。
另一个 xUnit 风格的测试框架。非常易于使用。能够输出 xUnit 风格和传统的 Perl 风格。
提供 CGI 接口来编写和运行测试套件。
测试文件属性(空、特定大小、可读、可执行、可写等)。
允许您将测试嵌入程序文件中的 POD 中,从而允许您在编写文档时进行测试,或在编写代码时进行测试,或两者兼而有之。一个副作用是您的示例代码可以是测试代码。
LectroTest 是 Perl 的一种自动的基于规范的测试工具。该项目灵感来自 Koen Claessen 和 John Hughes 为 Haskell 编程语言开发的 QuickCheck。
测试假设的平方函数
Property { ##[ x <- Int #]## square( $x ) == $x * $x; }, name => "Finding $x's square";
测试长字符串,允许轻松地查看不平等或不匹配的位置。
组合子程序参数测试。允许您测试函数的所有参数组合。
轻松覆盖模块中的子程序以进行单元测试。
允许您创建以特定方式响应方法的对象,从而允许您测试自己的代码如何处理具有此类返回值的对象。
最常用的测试模块。适用于大多数测试用例的适当功能集,现在已成为 Perl 的标准(从 5.6.2 和 5.8.0 开始)。
模块允许您将 make test 结果发送到 CPAN 测试人员。包括方便的 cpantest 程序,使命令行报告变得容易。
基本的测试模块,您很少会单独使用它,因为 Test::More
完全取代了它。
围绕标准测试函数的单元测试包装函数。允许您指定设置函数,以及在发生错误时运行的拆卸函数。
用于测试 Perl 本身发行版的框架。一般公众通常不会使用它。
Perl 的 JUnit 测试。
对测试文件运行详细测试。现在似乎被 Test::Harness
中包含的 prove 程序所取代。
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";
给定一个 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");
测试环境是否具有适当的数据。
测试文件和目录是否具有特定内容。
根据Business::ISBN
验证 ISBN 和 ISBN 部分。
测试电子邮件是否正确发送和接收。
用于测试 XML 语法等效性的辅助函数,即使字符串本身不同。
允许您运行针对基于 Apache 的软件的测试。还可以让您在 Apache 内部运行测试。不限于 mod_perl。
http://www.modperlcookbook.org/~geoff/slides/ApacheCon/2003/apache-test-printable.ppt.gz
测试 HTML 是否具有(或没有)特定的链接、文本、标签、注释等。对于测试网站非常有用(另请参见WWW::Mechanize
和 Test:HTML::Lint
)。
检查 HTML 是否根据HTML::Lint
格式良好。
检查 HTML 是否根据HTML::Tidy
格式良好。
确保 HTTP 响应具有适当的值。
WWW::Mechanize
的子类,具有用于自动化测试的便捷方法。
基于Test::Builder
对其他Test::
模块运行测试。
对模块执行基本 Kwalitee 检查:检查它们是否具有格式良好的 POD、是否编译、是否都定义了相同的$VERSION
、是否在Makefile.PL 中具有先决条件以及是否存在一些标准文件。
测试代码片段是否按预期死亡或不死亡,以及是否出现正确的错误。
以特定的非字母顺序执行您的测试,而无需使用数字前缀命名它们。
测试以确保您的测试没有发出任何警告。
检查给定的 POD 或 Perl 文件的语法有效性。还有一个函数可以让你轻松地检查发行版中的所有文件。
检查给定的 POD 或 Perl 文件的语法有效性。还有一个函数可以让你轻松地检查发行版中的所有文件。
检查发行版中文件名称的可移植性。测试使用perlport 中列出的建议,第“文件和文件系统”部分。
检查您的Makefile.PL 是否指定了正确的先决条件。
验证由Module::Signature
创建的模块签名是否正确。
基于Test::Builder
对其他Test::
模块运行测试。
检查模块文件是否具有正确的版本信息。
用于测试可能引发警告的代码的便捷模块。测试函数捕获任何警告,因此您可以根据正则表达式检查它们。
例如,此代码检查WWW::Mechanize
的warn()
方法是否确实引发了警告。
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";
允许您故意从程序中隐藏模块,即使它们已安装。这主要用于测试在未安装特定依赖模块时具有回退的模块。
以下人员帮助贡献了此页面:Andy Lester、Dominic Mitchell Philipe 'BooK' Bruhat、Chris Winters、Per Christian Nødtved 以及已故的伟大 Iain Truskett。