【问题标题】:Mocking an object created inside a method during a PHPunit test在 PHPunit 测试期间模拟在方法内创建的对象
【发布时间】:2019-07-31 13:33:27
【问题描述】:

我目前正在尝试扩展我的工作应用程序的单元测试覆盖范围,并且我面临一个现有服务将数据发送到 SOAP api 的问题。我想模拟 \SoapClient 对象,它是在我要测试的方法中创建的。

现在我找不到一种方法来设置一个模拟来替换真正的 SoapClient 对象。模拟对象是 UploadFlight 方法的简单模拟,应该返回“true”。

这里可以看到方法:

    public function sendPreflightPlanning()
    {
        $doc = $this->getPreflightPlanning();

        $client = new \SoapClient($this->wsdl, [
            'soap_version' => \SOAP_1_2,
            'trace' => true,
        ]);

        return $client->UploadFlights($doc);
    }

如前所述,我的模拟应该是$client var。

问候,

【问题讨论】:

  • 编写单元测试有助于解决拱问题。你发现了你的问题。这就是为什么真正的方法是将 $client 注入您的课程的原因。然后单元测试覆盖率就不会有问题

标签: php soap phpunit


【解决方案1】:

根据 Myxaxa 的评论并经过我这边的一些研究,似乎这样做的好方法就是将soap客户端作为依赖项注入。

感谢您的回答!

【讨论】:

  • 如果您想在不同情况下构建具有不同参数的soapclient,有时这可能会导致一些问题。这时候SoapClientBuilder 服务可能会派上用场。您可以在单元测试中注入并模拟它。这样一来,您就可以保持客户端的灵活性,并且还可以为该构建器进行单元测试。
  • 这是个好主意。您是否愿意将您的评论转换为答案,以便我验证它? :)
猜你喜欢
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
相关资源
最近更新 更多