我有一个单元测试,我在其中创建了一个模拟对象:
$resetTokenManagerStub = $this->getMockBuilder(ObjectManager::class)->getMock();
我将此作为另一个模拟对象的返回值
$managerRegistryStub->method('getManagerForClass')->willReturn($resetTokenManagerStub);
我检查它是否只被调用了一次:
$resetTokenManagerStub->expects($this->once())->method('persist');
如果我在实际单元中的调用之前放置一个 var_dump,我会看到我在那里传递了代码并且存根是resetTokenManagerStub
,但测试结果仍然是:
There was 1 failure:
1) App\Tests\Service\UserServiceTest::testGeneratePasswordResetToken with data set #0 (Mock_User_a375caf8 Object (...), 'generatedToken')
Expectation failed for method name is equal to 'persist' when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.
为什么不计算通话?是因为我用它作为另一个模拟的返回值吗?我调用时得到的对象与单元测试中的对象getManagerForClass()
相同。我做了一个ar_dump
,两者看起来都一样:
object(Mock_ObjectManager_142d72a2)#26 (4) {
...
object(Mock_ObjectManager_142d72a2)#26 (4) {
...
我在这里做错了什么?