Symfony 3.4-如何为服务的PHPUnit测试模拟请求对象

时间:2019-12-21 06:56:33

标签: unit-testing symfony phpunit symfony-3.4

我有一项服务,我需要为此编写phpunit测试

此服务的方法可以接受来自JSON POST的Symfony \ Component \ HttpFoundation \ Request对象

我需要以某种方式用JSON POST模拟Request对象,以便我可以正确地测试此方法

这是Service方法的样子

namespace AppBundle\Service;

use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Request;

/**
 * Class SubscriptionNotificationProcessor
 * @package AppBundle\Service
 */
class SubscriptionNotificationProcessor
{
     ...
     public function process(Request $request)
     {
           $parameterBag = $request->request;
           $notification_type = $parameterBag->get('notification_type');
           ...
      }
 }

我的问题是,如何模拟用JSON数据填充的Request参数?

1 个答案:

答案 0 :(得分:0)

这是Symfony\Component\HttpFoundation\Request

的构造函数
public function __construct(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], array $server = [], $content = null)
    {
        $this->initialize($query, $request, $attributes, $cookies, $files, $server, $content);
    }

您可以看到$resquest是第二个参数,您可以执行以下操作:

$request = new Request([], [json_encode([ 'foo' => 'bar'])], [], [], [], [], []);

现在您可以将对象传递给服务process($request);