我正在尝试使用 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::sampleNotification
用 WebhookNotification
类型和 subscription_id
打包一个 sampleNotification
。您可以查看示例用法 here .
注意 $webhookNotification->subscription
不会给你一个完整的对象,你必须运行 find针对您的沙箱检索整个订阅。
关于php - 为 Braintree webhook 构建 PHPUnit 测试时间接修改重载属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39138051/