【问题标题】:Mock class with fluent interface in Phpunit在 Phpunit 中具有流畅接口的模拟类
【发布时间】:2021-04-30 05:34:40
【问题描述】:

我正在使用没有返回类型声明的流畅方法来模拟这个示例类:

<?php

class Foo
{
    private string $x;
    private string $y;
    
    public function setX(string $x)
    {
        $this->x = $x;
        return $this;
    }
    
    public function setY(string $y)
    {
        $this->y = $y;
        return $this;
    }   
}

使用 PhpUnit:

$mock = $this->getMockBuilder(Foo::class)
    ->getMock();

默认情况下,这不适用于没有返回类型声明的流畅方法,因此我需要添加 ff.:

$mock->method('setX')->will($this->returnSelf());
$mock->method('setY')->will($this->returnSelf());

如果有很多流利的方法,这可行,但编写起来很麻烦。我的问题是,有没有办法为整个类而不是每个方法设置这个?

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    据我所知,没有办法做到这一点。这将为 mock 提供一种为特定方法集返回自身的方法,而 phpunit mock 没有这样的功能。

    如果很多方法都需要这个,你可以创建一个手动模拟(只是一个简单的类,它扩展类到模拟并实现魔术方法__call() (https://www.php.net/manual/en/language.oop5.overloading.php#object.call)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      相关资源
      最近更新 更多