0

我有一个单元测试,我在其中创建了一个模拟对象:

 $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) {
...

我在这里做错了什么?

4

1 回答 1

0

我又一次傻了。对不起这篇文章。这就像橡皮鸭方法。我挣扎了一个小时,当我将它提交到论坛时,我发现我做错了什么......

$resetTokenManagerStub->expects($this->once())->method('persist');行在实际函数调用之后被调用...

于 2019-11-05T10:51:44.777 回答