Mockery为多个调用指定预期参数

Tim*_*rst 11 php phpunit mocking symfony mockery

我试图模拟一个对象,该对象获得两个相同函数但具有不同参数的调用.为多个调用返回不同的返回值非常简单但我无法在任何地方找到如何使用参数验证来执行此操作.

我试过了:

$this->eventDispatcher
    ->shouldReceive('dispatch')
    ->twice()
    ->with(Events::SELECT,\Mockery::type('\Not\Really\A\Namespace\Event'))
    ->with(Events::ACTIVITY,\Mockery::type('\Not\Really\A\Namespace\Event');
Run Code Online (Sandbox Code Playgroud)

$this->eventDispatcher
        ->shouldReceive('dispatch')
        ->twice()
        ->with(
            [Events::SELECT,\Mockery::type('\Not\Really\A\Namespace\Event')],
            [Events::ACTIVITY,\Mockery::type('\Not\Really\A\Namespace\Event')]
        );
Run Code Online (Sandbox Code Playgroud)

但他们工作.

从输出PHPUnit给我看起来我似乎得到一个数组?

Tim*_*rst 16

嗯,这很快; P显然你可以这样做,它工作得很好:

$this->eventDispatcher
    ->shouldReceive('dispatch')
    ->with(Events::SELECT,\Mockery::type('\Not\Really\A\Namespace\Event'));

$this->eventDispatcher
    ->shouldReceive('dispatch')
    ->with(Events::ACTIVITY,\Mockery::type('\Not\Really\A\Namespace\Event'); 
Run Code Online (Sandbox Code Playgroud)

  • 我发现你必须在每个“shouldReceive()”后面添加“once()”,否则如果根本不调用该方法,测试也不会失败。我还必须在末尾添加另一个 `shouldReceive()->never()` 以不允许进一步的调用。感觉有点老套 - 但似乎有效。 (2认同)