2012-11-16 3 views
1

클래스 생성자에 필요한 서비스를 조롱하고 싶습니다. 나는 PHPUnit : MyService가 필요하다. Mock_MyService_0afc7fc1이 필요하다.우리 자신의 서비스를 조롱하는 것이 가능합니까?

그러나 Request, EntityManager 또는 다른 Symfony 2 구성 요소에서는이 문제가 없습니다. 여기

내 클래스의 구조 :

use Acme\Bundle\Service\MyService; 
use Symfony\Component\HttpFoundation\Request; 

... 

public function __construct(MyService $service, Request $request) 
{ 

내 모의 :

... 

$service = $this->getMock('MyService'); 

$class = new Class($service, $request); 

그것은 우리 자신의 서비스를 조롱하는 것은 불가능? 심포니 2 구성 요소 만?

추신 : MyService : public function __construct($service, Request $request)을 삭제하면 작동합니다. 이

답변

1

을 :(으로하지만 문제는 당신 MyService 클래스를 찾을 (또는 자동로드) 할 수없는 테스트 실행시 그 phpunit을 내 변수를 정의하고 싶다.

즉, 당신은 아마거야 그들 모두를 스캔하고 모의를 만들 존재하는 원래의 클래스를 필요로 다른 도발의 라이브러리와 같은 문제로 실행.

당신이 phpunit을 정규화 된 클래스 이름을 말할 필요가 있기 때문에이 발생합니다.

을 코드를 $this->getMock("\Acme\Bundle\Service\MyService");으로 변경하면 문제가 해결됩니다.

(그래도 조롱을 해보세요. 멋진 라이브러리입니다)

+0

설정을 자동로드하는 경우, 전체 경로없이 작동합니다! – markus

+0

답변 해 주셔서 감사합니다. +1 – rgazelot

+0

@ markus-tharkun 그것은 "뭔가를 조롱하다"는 식으로 작동하지만 올바른 방법을 제공하지 못하며 동일한 수업을 연장 할 수 없습니다. PHPUnit은 클래스가 정의 된 네임 스페이스를 인식하지 못하고 정적 클래스 분석이 필요하기 때문에 테스트 클래스에서 사용 문을 해석하지 않습니다. https://wiki.php.net/rfc/class_name_scalars를 사용하면 긴 경로 대신에'MyService :: class'가 멋지게 보입니다. 하지만 지금은 대안을 알지 못합니다 :) (틀린 날에 뭔가 잘못 생각한 경우) – edorian

관련 문제