2017-09-29 2 views
0

Symfony 3.3과 PHPUnit 5.7을 사용 중이며 API 컨트롤러 테스트 서비스를 모의하려고합니다.PhpUnit과 Symfony : 모의 서비스가 작동하지 않습니다.

컨트롤러 :

class ApiTestManager extends BaseApiController{ 
    public function getAction(): View 
    { 
     $response = $this->get('app.business.test_api')->getResponse(); 
     return $this->view($response); 
    }} 

테스트 클래스 :

class ApiTestManagerTest extends WebTestCase { 
public function testApiCall() 
{ 
    $client = static::createClient(); 

    $service = $this->getMockBuilder(ApiTestManager::class) 
     ->disableOriginalConstructor() 
     ->setMethods(['getResponse']) 
     ->getMock() 
     ->expects($this->any()) 
     ->method('getResponse') 
     ->will($this->returnValue(new Response())); 

    $client->getContainer()->set('app.business.test_api', $service); 
    $client->request('GET', 'de/api/v1/getResponse'); 

    $this->assertEquals(200, $client->getResponse()->getStatusCode()); 
}} 

내가 실수를 찾으려고 노력에 시간을 소비했지만, 매번 나는 그것이 나에게 다음과 같은 오류를 제공이 테스트를 실행합니다

Error: Call to undefined method PHPUnit_Framework_MockObject_Builder_InvocationMocker::getResponse() 

누구든지 내 코드에 무슨 문제가 있다고 말할 수 있습니까? 감사합니다 :)

+0

'getMockBuilder()'의 매개 변수로 완전한 클래스 이름을 사용하는 것이 좋습니다. 그리고 올바른 WebTestCase 클래스 인'Symfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase'를 확장 했습니까? –

+0

불행히도 이것은 별다른 차이를 만들지 못합니다. 맞습니다. WebTestCase : – jennymo

답변

1

어쩌면? 그것은 내가 볼 수있는 유일한 것입니다 ...

$service = $this->getMockBuilder(ApiTestManager::class) 
     ->disableOriginalConstructor() 
     ->setMethods(['getResponse']) 
     ->getMock(); 
$service->expects($this->any()) 
     ->method('getResponse') 
     ->will($this->returnValue(new Response())); 
+0

예, 작동합니다, 감사합니다 ...하지만 이유를 이해하지 못합니다. D : 이전에했던 것처럼 내가 어떻게 연쇄 할 수 없는지 아십니까? ? – jennymo

+0

은 정말로 왜'getMock()'이'generator'의 결과를 반환하는지 볼 수 있듯이, 왜 그런지 이해하지 못합니다.하지만 문서, 예제 및 프로젝트에서 항상이 방법을 보았습니다 ... –

관련 문제