gpt4 book ai didi

perl - 使用打印到屏幕的参数对 Perl 函数进行单元测试

转载 作者:行者123 更新时间:2023-12-02 06:56:30 26 4
gpt4 key购买 nike

如何使用打印到屏幕的参数对 perl 函数进行单元测试?

sub test {
my $var = shift;
if( $var eq "hello") {
print "Hello";
}
else {
print "World";
}
}

我想在打印到屏幕的函数中完全涵盖所有条件,但我不知道如何......

我在 stackoverflow 上看到了这个答案 How can I unit test Perl functions that print to the screen?

是的,答案可以对输出字符串的函数进行单元测试,但前提是函数中没有所需的参数。在我的例子中,我可以使用这个:

stdout_is(\&test, "World", 'test() return World');

但是我如何测试 print "Hello";

编辑

我尝试使用这个测试用例:

should_print_hello();
should_print_world();


sub should_print_world
{
stdout_is(\&test, "World", "should_print_world");
}

sub should_print_hello
{
# this does not work and outputs error
stdout_is(\&test("hello"), "Hello", "should_print_hello");
}

由于 stdout_is' 函数的参数只是对函数的代码引用(如果我没记错的话),它没有 function(variables_here).

我还阅读了 perl Test::Output manual但我仍然找不到解决方案..还有其他方法还是我错过了什么?

所以我的主要问题是:如何对仅打印到屏幕 (stdout) 的 perl 函数(带参数)进行单元测试?

最佳答案

您只需要将要测试的调用包装在一个匿名子例程中

我正在使用 output_is 来测试 stdoutstderr。如果您有使用警告,这里的第四个测试应该会失败

output_is(sub { test('hello') }, 'Hello', '', 'Test specific output');
output_is(sub { test('xxx') }, 'World', '', 'Test non-specific output');
output_is(sub { test('') }, 'World', '', 'Test null string parameter output');
output_is(sub { test() }, 'World', '', 'Test no-parameter output');

关于perl - 使用打印到屏幕的参数对 Perl 函数进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30363427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com