php - 为 Braintree webhook 构建 PHPUnit 测试时间接修改重载属性

标签 php symfony testing phpunit braintree

我正在尝试使用 PHPUnit 构建一个测试来测试我的 Braintree Hook 。我有这个使用下面的 dataProvider 的测试用例:

/**
 * @covers SubscriptionExpiredHook::processHook()
 * @dataProvider dataProvider
 */
public function testProcessHook($subscriptionId)
{
    $subscriptionExpiredHook = new SubscriptionExpiredHook($this->siteManager);

    $notification = $this->getMockBuilder('Braintree\WebhookNotification')
        ->disableOriginalConstructor()
        ->getMock();

    $notification->subscription->id = $subscriptionId;

    $router = $this->getRouterMock();

    $subscriptionExpiredHook->setSubscription(new Subscription($router));

    $response = $subscriptionExpiredHook->processHook($notification);

    $this->assertEquals(200, $response->getStatusCode());
}

public function dataProvider()
{
    return [
        [
            'subscription_id' => 'CRM1872',
        ]
    ];
}

导致问题的行是这样的:

$subscriptionId = $hook->subscription->id;

...这是我在运行测试时遇到的错误:

1) CRMPiccoBundle\Tests\Braintree\Hooks\SubscriptionExpiredHookTest::testProcessHook with data set #0 ('CRM1872') Indirect modification of overloaded property Mock_WebhookNotification_e65192ec::$subscription has no effect

有没有一种方法可以设置订阅 ID 以允许此测试继续进行,或者我是否以错误的方式看待它?

最佳答案

完全披露:我在 Braintree 工作。如果您还有任何疑问,请随时联系support .

WebhookNotifications 目前不可模拟,尽管使 webhook 测试更稳健是我们的路线图。暂时使用WebhookTesting::sampleNotificationWebhookNotification 类型和 subscription_id 打包一个 sampleNotification。您可以查看示例用法 here .

注意 $webhookNotification->subscription 不会给你一个完整的对象,你必须运行 find针对您的沙箱检索整个订阅。

关于php - 为 Braintree webhook 构建 PHPUnit 测试时间接修改重载属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39138051/

相关文章:

php - 无需刷新的 Ajax 发布

php多线程

forms - symfony 2.3表单getData在子表单集合中不起作用

symfony - 如果条件在 Twig 模板引擎中的循环

c - netbeans cunit 测试用例永无止境

php - 如何使用 PHP 在图像上添加文本

forms - Symfony2 表单生成器实体类型选定值

java - NoClassDefFoundError 与 AndroidJUnitRunner @java.util.Objects 与 MultiDex-App

python - pip --editable 无论顺序如何都会被覆盖

php - Magento 升级,层级价格从 1.4.0.2 到 1.7.0.2 出现错误