【问题标题】:PHPSpec: Mock static methodPHPSpec:模拟静态方法
【发布时间】:2013-10-30 12:51:33
【问题描述】:

我正在使用 PHPSpec 测试一个类,在我想为一个具有静态函数的类创建一个模拟之前,它运行良好。

我正在测试的课程:

<?php

namespace App\Service;

class PaymentService
{

    public function paymentVerification($orderId, array $data)
    {
        ...

        // Get the payment details
        $payment = \PayPal\Api\Payment::get($data['payKey'], $apiContext);

        ...
    }
}

PHPSpec 类:

<?php

namespace App\Spec\Service;

use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class PaymentServiceSpec extends ObjectBehavior
{
    /**
     * @param \PayPal\API\Payment $payment
     */
    function it_should_return_false_when_the_payment_verification_failed($payment)
    {
        ...
        // This throws a PHP Fatal error:  Call to undefined method PhpSpec\Wrapper\Collaborator::get() in
        $payment::get(Argument::exact($data['payKey']), Argument::exact($apiContext))->shouldReturn(array('foobar'));

        ...

        $this->paymentVerification($orderId, $data)->shouldReturn(false);
    }
}

如何模拟 \PayPal\Api\Payment::get($data['payKey'], $apiContext); ? 目前这会引发 PHP 致命错误:调用未定义的方法 PhpSpec\Wrapper\Collaborator::get()

如何正确地做到这一点?提前致谢!

【问题讨论】:

  • 已被覆盖here
  • @papirtiger 没有。当前的问题是关于 phpspec,而不是 phpunit。

标签: php tdd static-methods phpspec


【解决方案1】:

你应该避免这样做。创建一个将包裹贝宝库的薄层。嘲笑自己的东西。

https://github.com/phpspec/prophecy/pull/20#issuecomment-18133965

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多