我在'net和我所拥有的书 Perl Testing 周围找到的文档,或者说或建议Perl的单元测试通常在创建模块时完成。
这是真的吗?有没有办法使用Test::More
和堂兄弟对实际程序进行单元测试?
答案 0 :(得分:11)
当然,您可以使用Test::More测试脚本。这更难,因为大多数脚本需要作为一个单独的进程运行,从中捕获输出,然后根据预期的输出进行测试。
这就是 modulinos (参见第17章:brian d foy,Mastering Perl,第二版,O'Reilly,2014)的原因。 modulino是一个也可以用作模块的脚本。这样可以更容易测试,因为您可以将modulino加载到测试脚本中,然后像常规模块一样测试其功能。
modulino的关键特征是:
#! /usr/bin/perl
package App::MyName; # put it in a package
run() unless caller; # Run program unless loaded as a module
sub run {
... # your program here
}
该功能不必称为run
;如果你是C程序员,可以使用main
。您通常还需要run
根据需要调用的其他子例程。
然后,您的测试脚本可以使用require "path/to/script"
加载您的modulino并运用其功能。由于许多脚本涉及编写输出,并且通常更容易打印而不是执行print sub_that_returns_big_string()
,因此您可能会发现Test::Output有用。
答案 1 :(得分:0)
这不是测试代码的最简单方法,但您可以直接测试脚本。您可以使用system
(或更好IPC::Run3
)运行包含特定参数的脚本,捕获输出并将其与预期结果进行比较。
但这将是一个顶级测试。很难说出代码的哪一部分会导致问题。 单元测试用于测试单个模块。这样可以更轻松地查看问题的来源。另外,单独测试函数要容易得多,因为您只需要考虑在较小的代码片段中会发生什么。 测试方式取决于您的项目规模。您可以将所有内容放入单个文件中,但将代码放入模块(甚至将其拆分为不同的模块)将在未来为您带来好处:代码可以更容易地重用和测试。