在Perl中进行单元测试时提示用户

时间:2011-10-02 21:31:37

标签: perl unit-testing

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

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

处理此问题的最佳方法是什么?

由于

2 个答案:

答案 0 :(得分:7)

您在寻找ExtUtils::MakeMaker::prompt吗?

  

其他便利功能

     

提示

my $value = prompt($message);
my $value = prompt($message, $default);
  

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

     

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

     

如果没有提供$ default,则会使用空字符串。

答案 1 :(得分:3)

我会对此采取不同的措施。为什么你需要用户作为中间人 - 特别是对于自动化测试?一个明显更好的方法(根据我自己的经验)是做以下之一:

  • 通过测试使服务器(主机名/端口)以某种方式可被发现。它既可以是真正的可发现性,也可以是服务器自身注册,或者是一些配置服务。考虑到现实世界中服务器的客户端需要能够连接到服务器,这样的发现逻辑(再次,最糟糕的情况是某些配置文件)应该已经存在。

  • 对于非常高级的情况,如果测试端口没有运行,允许测试工具启动测试端口上服务器的测试实例。

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