【问题标题】:Shortest way to specify a return value expectation for a specific argument in Mockery在 Mockery 中为特定参数指定返回值期望的最短方法
【发布时间】:2018-05-05 11:39:42
【问题描述】:

我想创建一个Mock,其方法应为特定参数返回true,为任何其他参数返回false

我可以通过以下方式实现:

$this->myMock = Mockery::mock(MyClass::class);
$this->myMock->shouldReceive('myMethod')->with('my-argument')->andReturn(true);
$this->myMock->shouldReceive('myMethod')->andReturn(false);

但我想知道是否有任何更短的方法来指定它,因为我必须为 许多 模拟执行此操作,并且看起来有很多代码用于这个简单的目的(注意我的属性/类/methods/arguments 名称比这个例子长得多)。

【问题讨论】:

    标签: phpunit mockery


    【解决方案1】:

    你可以使用 Mockery 的andReturnUsing-方法。通过评估提供的参数来计算返回值需要一个闭包。应该像这样工作:

    $this->mock
        ->shouldReceive('myMethod')
        ->andReturnUsing(function ($argument) {
            if ($argument) {
                return true;
            }
    
            return false;
        });
    

    【讨论】:

      【解决方案2】:

      我发现我可以使用:

      $this->myMock = Mockery::mock(MyClass::class);
      $this->myMock->shouldReceive('myMethod')->passthru();
      

      这会将对 myMethod() 的调用推迟到真实对象,这将根据参数返回 truefalse - 这显然与问题中的代码所做的不同,但它在我的场景中确实有效,而且时间更短。

      【讨论】:

        猜你喜欢
        • 2019-08-02
        • 2014-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-23
        • 1970-01-01
        • 2013-01-12
        相关资源
        最近更新 更多