我无法弄清楚如何让ExtUtils::MakeMaker提示用户询问是否要在/t
中运行需要实时互联网连接的测试子集。这可能吗?
答案 0 :(得分:2)
通常,您不希望在最终用户的系统上运行此类测试。你不能依赖它是可靠的,即使它存在。但是如果你真的想这样做,你可以使用prompt辅助函数和test section参数来实现这一点,如果你将网络测试放在它自己的目录中:
use ExtUtils::MakeMaker;
…
my $network = prompt("Do you want to run tests requiring network access [y/n]", "n") =~ /y/i;
WriteMakefile(
...
test => {
TESTS => $network ? 't/*.t t/network/*.t' : 't/*.t'
}
);
答案 1 :(得分:-1)
我记得在野外看到的一种方法是默认跳过这些测试但打印信息告诉用户如果应该执行测试则设置一个特定的环境变量。
由于测试只是perl代码,因此您可以在那里询问用户并相应地跳过。
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw/ say /;
use Term::ReadKey;
use Test::More;
say "Do you want to run tests with live internet connectivity? [y/n]";
my $key = <>;
ok(1, 'first test');
SKIP: {
skip('you said you dont want to run these', 1) if $key ne 'y';
ok(1, 'second test, skippable');
}
ok(1, 'third test');
done_testing;