【问题标题】:phpunit mock does not count the function callphpunit mock 不计算函数调用
【发布时间】:2020-03-01 17:26:32
【问题描述】:

我有一个创建模拟对象的单元测试:

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

我在这里做错了什么?

【问题讨论】:

    标签: php testing mocking phpunit


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2011-08-24
      • 2020-01-25
      • 2017-04-02
      • 1970-01-01
      • 2017-01-28
      • 2023-03-04
      相关资源
      最近更新 更多