gpt4 book ai didi

perl - 如何在Perl中伪造STDIN?

转载 作者:行者123 更新时间:2023-12-03 11:41:36 24 4
gpt4 key购买 nike

我正在对需要用户输入的组件进行单元测试。如何告诉 Test::More 使用我预定义的一些输入,这样我就不需要手动输入它了?

这就是我现在所拥有的:

use strict;
use warnings;
use Test::More;
use TestClass;

*STDIN = "1\n";
foreach my $file (@files)
{

#this constructor asks for user input if it cannot find the file (1 is ignore);
my $test = TestClass->new( file=> @files );

isa_ok( $test, 'TestClass');
}


done_testing;

该代码确实按回车键,但是该函数正在检索0而不是1;

最佳答案

以下最小脚本似乎有效:

#!/usr/bin/perl

package TestClass;
use strict;
use warnings;

sub new {
my $class = shift;
return unless <STDIN> eq "1\n";
bless {} => $class;
}

package main;

use strict;
use warnings;

use Test::More tests => 1;

{
open my $stdin, '<', \ "1\n"
or die "Cannot open STDIN to read from string: $!";
local *STDIN = $stdin;
my $test = TestClass->new;
isa_ok( $test, 'TestClass');
}

输出:

C:\ Temp> t
1..1
OK 1-对象是TestClass

关于perl - 如何在Perl中伪造STDIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213986/

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