如何在文件更改时自动运行Perl测试套件?

时间:2009-11-21 13:34:42

标签: perl testing

是否有工具可以在Perl应用程序的目录树中查看文件更改,并在每次保存对某个模块的更改时重新运行测试套件?类似于masak’s tote的东西。

7 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

如果您使用Windows,

Win32::FileNotify可以帮助监控文件系统的更改。

答案 2 :(得分:3)

旧学校的unix解决方案是编写一个Makefile并通过一个cron作业定期触发(通常每分钟一次),如果出现问题,请将结果邮寄给你。

或者,如果您使用修订控制系统(如svn),则可以使用提交挂钩在提交文件时启动构建/测试周期。

您可以做的另一件事是在编辑器周围编写一个包装器脚本(这样当您关闭或保存文件时,会触发构建/测试周期。)

答案 3 :(得分:2)

执行此操作的基本方法是通过源代码控制和持续集成包,例如Smolder。签入文件时,CI服务器会注意到更改并为您运行测试套件。

许多CI产品会为您收集交叉运行信息,并可以向您显示测试,测试封面等方面的趋势。

答案 4 :(得分:1)

具有讽刺意味的是,我本周刚刚将了一些copyout.rb移植到了PHP。 http://joshribakoff.com/?p=106

答案 5 :(得分:1)

我不知道任何通用文件系统监视小部件,但这里是Perl特定的一半。

sub run_tests {
    my $prove_out = `prove -lr`;
    my $tests_passed = $? == 0;

    return "" if $tests_passed;
    return $prove_out;
}

这使用了Test :: Harness 3附带的prove实用程序。它在测试失败时退出非零值。将其插入到您的文件系统监视器中并进行设置。

答案 6 :(得分:0)

我还没有设法在Windows上成功安装Test::Continuous,我使用以下脚本,它对我来说非常好用:

use File::ChangeNotify;

$| = 1;

my $watcher = File::ChangeNotify->instantiate_watcher(
    directories => [ 't', 'lib' ],
    filter => qr/\.t|\.pl|\.pm/,
);

while (my @events = $watcher->wait_for_events) {
    print `prove -l -r -t --timer`;
}