模拟函数没有被调用

Posted

技术标签:

【中文标题】模拟函数没有被调用【英文标题】:Mocked function not getting called 【发布时间】:2017-11-17 15:24:30 【问题描述】:

在模拟接口方法时,我收到以下错误。

注意-

我正在使用服务存储库模式,并基于该模式创建了一个服务,并从中调用了一个存储库,我正在执行数据库操作。

流明版本 - 5.4 phpUnit 版本 - 4.8.35

错误 -

E:\event>phpunit
PHPUnit 4.8.35 by Sebastian Bergmann and contributors.

..E

Time: 4.63 seconds, Memory: 7.25MB

There was 1 error:

1) EventServiceTest::testEventListing
Mockery\Exception\InvalidCountException: Method getEventList() from Mockery_0_App_Repositories_Event_EventInterface should be called                                                                                                       exactly 1 times but called 0 times.

E:\event\vendor\mockery\mockery\library\Mockery\CountValidator\Exact.php:37
E:\event\vendor\mockery\mockery\library\Mockery\Expectation.php:298
E:\event\vendor\mockery\mockery\library\Mockery\ExpectationDirector.php:120
E:\event\vendor\mockery\mockery\library\Mockery\Container.php:297
E:\event\vendor\mockery\mockery\library\Mockery\Container.php:282                                       
E:\event\vendor\mockery\mockery\library\Mockery.php:152
E:\event\vendor\laravel\lumen-framework\src\Testing\TestCase.php:107
E:\xampp\php\pear\PHPUnit\TextUI\Command.php:176
E:\xampp\php\pear\PHPUnit\TextUI\Command.php:129
FAILURES!
Tests: 3, Assertions: 2, Errors: 1.

代码-

  public function testEventListing()
        
            $data = [
                'startDate' => '2017-06-14 00:00:00',
                'endDate'   => '2017-06-14 23:59:59'
                ];

            $reposneData = array(
                array(
                    'eventDate' => "2017-06-14 08:00:00"
                ),
                'status' => 1
            );

            //Mocking the event Repository
            $eventRepoMock = \Mockery::mock ( App\Repositories\Event\EventInterface::class );

            $eventRepoMock->shouldReceive ( 'getEventList' )
            ->once ()
            ->with ( $eventData )
            ->andReturn ( $reposneData );

            $eventService = new EventService($eventRepoMock);

            //Fetching mocked data
            $eventObj = $eventService->geteventList( $eventData );

            //Asserting based on success result.
            $this->assertEquals(1, $eventObj['status']);
        

【问题讨论】:

你的问题是这个错误? 为什么会出现这个错误? 【参考方案1】:

我解决了这个问题。我在我的服务中使用 toArray() 函数将集合对象转换为数组。模拟的存储库期待收集,但我提供了数组。所以我也嘲笑了这个系列,现在一切都很好。

【讨论】:

以上是关于模拟函数没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

如何在每次测试之前重置 Jest 模拟函数调用计数

不能在验证参数中使用模拟函数调用:调用次数过多

在“if”语句中没有调用模拟函数 - 用玩笑和酶反应应用程序测试?

为啥我的 Rhino Mocks Partial Mock 方法调用没有被模拟?

NSURLRequest 代表没有在设备上被调用 在模拟器上工作正常。

WatchOS 2.0:WCSessionDelegate 没有被调用(在模拟器中)