在Perl单元测试期间提示用户

在Perl单元测试期间提示用户,perl,unit-testing,Perl,Unit Testing,我正在编写一个模块,其中包含单元测试,需要运行某个外部服务器程序,如果是,则需要知道主机名和端口 我希望在运行测试套件时提示输入此信息,如果用户拒绝提供,则跳过这些测试 最好的处理方法是什么 谢谢您正在寻找ExtUtils::MakeMaker::prompt 其他方便的功能 提示 函数提供了一种简单的方法来请求用于编写makefile的用户输入。它显示$message作为输入提示。如果提供了$default,它将用作默认值。函数返回用户选择的$value 如果prompt()检测到它没有以交互

我正在编写一个模块,其中包含单元测试,需要运行某个外部服务器程序,如果是,则需要知道主机名和端口

我希望在运行测试套件时提示输入此信息,如果用户拒绝提供,则跳过这些测试

最好的处理方法是什么


谢谢

您正在寻找
ExtUtils::MakeMaker::prompt

其他方便的功能

提示

函数提供了一种简单的方法来请求用于编写makefile的用户输入。它显示$message作为输入提示。如果提供了$default,它将用作默认值。函数返回用户选择的$value

如果prompt()检测到它没有以交互方式运行,并且STDIN上没有任何内容,或者如果PERL_MM_USE_DEFAULT环境变量设置为true,则将在没有提示的情况下使用$DEFAULT。这可以防止自动进程阻塞用户输入

如果未提供$default,则将使用空字符串


我会采取不同的策略。为什么您需要用户作为这方面的中间人,特别是对于自动化测试?一个明显更好的方法(根据我自己的经验)是执行以下操作之一:

  • 使服务器(主机名/端口)在某种程度上可被测试发现。它可以是一个真正的可发现性,或者让服务器注册自己,或者,见鬼,是一些配置服务。考虑到现实世界中服务器的客户端需要能够连接到服务器,这样的发现逻辑(同样,最坏的情况是一些配置文件)应该已经存在

  • 对于真正高级的情况,允许测试工具能够在测试端口上启动服务器的测试实例(如果没有运行)


请注意,如果您的服务器由于某种原因无法检测到上述任何一种方法,那么socket puppet的答案是最好的方法。

在不知道服务器程序的详细信息或您希望如何检查它是否正在运行的情况下,您只需
使用Test::More
,在需要的地方插入提示,然后在测试中使用提示中的值。Perl中的单元测试实际上只是另一个Perl脚本,除了它通常充斥着
ok()
isa_ok()
,等等
test::More
中的函数;我只是不确定这样做是否会以某种意想不到的方式干扰测试线束或通过CPAN.pm之类的自动安装。啊,是的,这就是我想要的,谢谢。我知道它在某个地方,但我在寻找测试工具,而不是构建系统。:)我实际上使用的是
Module::Install
,而不是MakeMaker,但我相信它也可以做类似的事情。所有的建议都很好,但是这个服务器没有任何类型的发现协议,我也不能发明一个。“我只是在开发一个客户端库。@弗里多-别被我发明的这个花哨的术语弄糊涂了。客户如何知道如何连接?这就是我所说的发现protocol@friedo:作为一个用户,我更喜欢一个配置文件或命令行选项,这样我就可以调用测试(甚至可以从脚本?)而不必担心出现提示。
my $value = prompt($message);
my $value = prompt($message, $default);