我有一个服务类的模型。
它在我的setUp
函数
$this->myServiceMockup = $this->getMockBuilder(MyService::class)
->disableOriginalConstructor()
->setMethods(['myMethod'])
->getMock();
在我的测试功能中,我为此设定了一个期望。
$this->myServiceMockup->expects($this->once())
->method('myMethod')
->with($this->exactly(1), 'myName')
->willReturn($this->exactly(1));
所以这意味着当我只触发myMethod函数一次并且它将返回整数1时。
所以我测试的方法都有这行代码。
$myIntValue = $this->myService->myMethod($number, $name);
在此行$myIntValue
之后,当我运行测试时应该是1并且测试应该继续,以及我对此的理解。
但我得到了这个错误
方法名称的期望失败等于何时 调用1次(s)参数0用于调用
我的\ Path \ To \ Class \ MyService :: myMethod(1,' myName')不匹配 期望值。
1与预期类型不匹配"对象"。
没有任何意义,因为myMethod
期待一个整数和一个字符串。
public function myMethod($number, $name)
{
return $this->table->save($number, $name);
}
有人可以向我解释我在这里做错了什么,因为我没有想法。
答案 0 :(得分:2)
exactly()
是一个调用计数匹配器(如once()
或any()
),用作expects()
方法的参数。
只需替换:
->with($this->exactly(1), 'myName')
到
->with(1, 'myName')
willReturn()
也会“按原样”接受值。
答案 1 :(得分:2)
您没有正确使用$this->with
。
$this->myServiceMockup
->expects($this->once())
->method('myMethod')
->with($this->equalTo(1), $this->stringContains('myName'))
->willReturn(1);