【发布时间】:2017-05-01 08:48:26
【问题描述】:
考虑以下方法:
function m1()
{
$ent = new Entity;
...
try {
$ent->save();
} catch (QueryException $e) {
...
}
我必须触发一个异常。最好使用mockery。我该怎么做?
附:我无法将$ent 传递给方法。
UPD 让我描述一下我的特殊情况,以确认我是否确实需要触发异常。在这里,我正在尝试测试由支付系统触发的控制器操作,以通知用户已付款。在其中,我在数据库中存储来自PaymentSystemCallback 模型的所有支付系统数据,并将其链接到Order 模型,该模型是在将用户重定向到支付系统之前创建的。所以,它是这样的:
function callback(Request $request)
{
$c = new PaymentSystemCallback;
$c->remote_addr = $request->ip();
$c->post_data = ...;
$c->headers = ...;
...
$c->save();
$c->order_id = $request->request->get('order_id');
$c->save();
}
但是如果不正确的order_id进来了,外部约束就失效了,所以我这样改:
try {
$c->save();
} catch (QueryException $e) {
return response('', 400);
}
但是以这种方式处理任何数据库异常看起来并不好,所以我正在寻找一种方法来重新抛出异常,除非$e->errorInfo[1] == 1452。
【问题讨论】:
标签: php phpunit automated-tests mockery