2017-05-04 97 views
0

我有从HttpFoundation请求对象返回值的类。我想为这个班级编写测试,我有问题。 这就是我的课:请求对象在symfony和phpunit中的测试方法

class RequestCollected 
{ 
    private $request; 

    public function __construct(Request $request) 
    { 
     $this->request = $request; 
    } 

    public function getUserAgent(): string 
    { 
     return $this->request->headers->get('User-Agent'); 
    } 

    public function getUri(): string 
    { 
     return $this->request->request->get('uri'); 
    } 
} 

这是我的测试:

public function testGetUserAgent() 
    { 
     $userAgent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'; 
     $request = $this->prophesize(Request::class); 
     $request->headers = $this->prophesize(HeaderBag::class); 
     $request->headers->get('User-Agent')->willReturn($userAgent); 

     $collected = new RequestCollected($request->reveal()); 

     $this->assertEquals($userAgent, $collected->getUserAgent()); 
    } 

    public function testGetUri() 
    { 
     $uri = 'test'; 
     $request = $this->prophesize(Request::class); 
     $request->request = $this->prophesize(ParameterBag::class); 
     $request->request->get('uri')->willReturn($uri); 

     $collected = new RequestCollected($request->reveal()); 

     $this->assertEquals($uri, $collected->getUri()); 
    } 

错误是相同的两个测试: 错误:调用一个成员函数willReturn()上的空

有什么解决方案?或另一种方法来测试什么是使用请求对象?

问候

+0

为什么你要做$ request-> request-> headers而不是$ request-> headers? – Cerad

+0

我的不好。现在错误是“错误:调用成员函数willReturn()null”就像在第二次测试 – jager91

回答

0

你不需要使用预言或模拟对象来测试这个简单的类

public function testGetUserAgent() 
{ 
    $userAgent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'; 
    $request = new Request(); 
    $request->headers = new HeaderBag(['User-Agent' => $userAgent]); 
    $collected = new RequestCollected($request); 
    $this->assertEquals($userAgent, $collected->getUserAgent()); 
} 

唯一的,你需要的是检查,如果你的类是获得信息的一个有效的请求,有时候事情比我们想象的要简单:)

+0

谢谢,工作正常:) – jager91