0
我正在尝试用嘲讽在Perl中编写单元测试。这是我第一次嘲笑。Perl单元测试嘲讽
方法在MyConnect.pm
定义sub connect_attempt {
my ($a, $b, $c) = @_;
// some calculation with $c
$status = connect($a, $b);
return status;
}
连接在插座模块定义子程序。我需要测试两个场景
1)连接成功 - 为了测试这个我打算返回一个新的模拟对象或字符串
2)连接失败 - 状态将保持不确定
MyConnect.t
use MyConnect;
use Socket;
my $status;
my $mock = Test::MockObject->new();
my $connect_module = Test::MockModule->new('MyConnect');
$connect_module->mock('connect_attempt' => sub { return "true"});
my $socket_module = Test::MockModule->new('Socket');
$socket_module->mock('connect' => sub { return "true"});
$status = $connect_module->connect_attempt("122", "53", 0);
ok(defined $status, 'Its fine');
我得到下面的错误:
Cant locate object method "connect_attempt" via package "Test::MockModule" at t/MyConnect.t line 21.
#Looks like your test exited with 9 before it could output anything.
Dubious, test returned 9 (wstat 2304, 0x900)`
Line 21 is the call `$status = connect_attempt("122", "53", 0);
按我的理解,我创建MockModul e为我的模块(MyConnect)和套接字模块,因为我将调用它的连接子例程。 我已经将这两个子例程的响应设置为true。我应该期待$状态为真。
有人可以解释我哪里出错了。这是我第一次嘲笑单元测试。我可能误解了某些概念。
感谢
我选择了您建议的第一个选项。然而,它似乎连接似乎没有返回嘲笑的价值。它实际上是调用主机参数。连接方法的模拟是否正确完成? 谢谢 – learningMyWayThru