PHPUnit模拟RequestStack的symfony

tim*_*y L 4 phpunit unit-testing mocking symfony

我不明白怎么嘲笑这个: $requestStack->getCurrentRequest()->getContent()

有2种方法:getCurrentRequest()->getContent()它返回一个json对象(PO​​ST响应)

我在RequestStack课堂上使用symfony .

整个代码是

class MessageReceivedService
{
    protected $message;

    public function __construct(RequestStack $requestStack)
    {
        $this->message = json_decode($requestStack->getCurrentRequest()->getContent());
    }

    public function getMessage()
    {
        return $this->message;
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢你.

Ram*_*iss 10

你实际上不必模拟这个RequestStack类,因为它基本上是一个容器.

如果你想用它测试RequestStack,你可以做这样的事情:

<?php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;

class MessageReceivedServiceTest extends \PHPUnit_Framework_TestCase
{
    public function test()
    {
        $request = new Request([], [], [], [], [], [], [], json_encode([
            'foo' => 'bar'
        ]));

        $requestStack = new RequestStack();
        $requestStack->push($request);

        // Do your tests
    }
}
Run Code Online (Sandbox Code Playgroud)

当你调用currentRequest$requestStack变量,它应该返回的$request变量.

  • 我通常只真正模拟我无法真正测试的东西(快速,这是单元测试的要求)。例如:数据库查询、网络请求或具有许多其他依赖项的类。对于像“RequestStack”这样的简单容器类,我只使用实际的类,因为它没有做任何真正令人兴奋的事情。 (2认同)