如何在perl中模拟Expect :: expect()函数

时间:2014-11-12 08:26:29

标签: perl unit-testing mocking expect

我在模拟一段涉及perl

中的Expect :: expect函数的代码时陷入困境

它是这样的:

my $result = 0;
my $exp = new Expect;
$exp->raw_pty(1);
$exp->log_stdout(0);
$exp->spawn("$some_command");

$exp->expect(undef,
    [ qr/some text/i,
        sub { my $self = shift;
            $self->send("$a_param\n");
            exp_continue;
        } ],
    [ qr/more text/,
        sub { my $self = shift;
            $self->send("$another_param");
            sleep 5;
            exp_continue;
        } ],
    [ qr/some more text/ ,
        sub { my $self = shift;
            $ld_info = "$something";
            $self->clear_accum();
            $self->send($ld_info);
            sleep 5;
            exp_continue;
        } ],

    [ qr/further more text/,
        sub { my $self = shift;
            $result = 1;
        } ],
);
return $result;}

$ result的值是最终返回值。在模拟时我打算将result的值设置为1而不实际运行命令然后尝试匹配模式。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

你可以使用

来做到这一点
local *

使用您自己的代码替换代码的实现。 它实际上取决于函数的调用方式,但我认为你可以使用类似的东西:

local *Expect::expect = sub
{
    return 1;
}