2014-09-30 7 views
1

저는 PHP 유닛으로 시작하고 테스트 할 클래스에 대한 __construct 메소드의 의존성으로 요구되는 Eloquent Model을위한 모의 (Mock)을 빌드하려고합니다.PHP 단위 모의 다큐먼트 저장소 테스트 케이스

1) 응용 프로그램 \ :이 오류가

namespace App\Repository\Link; 

use Link as ModelLink; //Link is the Eloquent model to pass as constructor for EloquentLink 
use Illuminate\Database\Eloquent\Model as Eloquent; //Link extends Eloquent 

class EloquentLinkTest extends \PHPUnit_Framework_TestCase 
{ 
    protected $modelMock; 
    protected $link; 

    public function setUp() { 
     $this->modelMock = $this->getMockBuilder('ModelLink')->getMock(); 
     $this->link = new EloquentLink($this->modelMock); 
    } 

    public function testCase() 
    { 
     //comes here 
    } 
} 

:

namespace App\Repository\Link; 

use App\Repository\RepositoryAbstract; 
use Illuminate\Database\Eloquent\Model; 

class EloquentLink extends RepositoryAbstract implements LinkInterface 
{ 
    protected $link; 

    public function __construct(Model $link) 
    { 
     $this->link = $link; 
    } 
} 

내 테스트 클래스는 다음과 같습니다

내가 테스트 할 내 클래스의 생성자 Repository \ Link \ EloquentLinkTest :: testCase 인수 1을 App \ Repository \ Link \ EloquentLink :: __ construct()로 전달하면 Illuminate \ Database \ Eloquent \ Model의 인스턴스 여야합니다. Mock_ModelLink 인스턴스 _ea1343ff 주어진

어떻게 모의 모델 클래스를 확장 할 수 있습니까?

답변

1
use Link as ModelLink; 

이 파일 (테스트 케이스)를 포함하는 의 목적을 위해 글로벌 네임 스페이스에 존재하는 Link 클래스를 가리 키도록 ModelLink 이름을 스코프.

$this->modelMock = $this->getMockBuilder('ModelLink')->getMock(); 

의 상황에 맞는 다른 파일getMockBuilder 방법에 대한 정의를 포함, 즉 어느 클래스 파일에 나가서 전역 네임 스페이스에 존재하는 ModelLink 클래스의 모의 객체를 생성합니다.

여기서 중요한 것은 두 상황이 완전히 다른 것입니다. 당신을 위해 작동하는 경우

Note: Importing rules are per file basis, meaning included files will NOT inherit the parent file's importing rules.

이로 전화를 변경 시도하고 참조 :

$this->modelMock = $this->getMockBuilder('Link')->getMock(); 

당신이 있었다면 그것은 다른 것을 우리는지도의 사용 설명서에에 볼 수있는이 인용이있다 테스트 케이스 안에 생성 된 ModelLink 객체의 인스턴스를 getMockBuilder으로 전달하지만, 문자열을 매개 변수로 사용하므로 클래스 이름에서만 mock 객체를 생성해야한다는 것을 유추 할 수 있습니다. 다른 정보를 사용할 수 없으면 별명이 지정된 클래스 이름을 전달할 수 없으며 올바른 클래스를 올바르게 찾을 수 있다고 기대할 수 없습니다. 이 경우 그냥 추측을하고 빈 ModelLink 객체의 모의 객체를 만듭니다 (원래 Link 객체와 0의 관계).

+0

감사합니다. 귀하의 정보로 한 가지 더 변경했습니다. 모델 링크 확장 Eloquent (Illuminate \ Database \ Eloquent \ Model에 대한 laravel 별칭입니다.) 그래서 다음과 같이 변경했습니다. class Link extends Illuminate \ Database \ Eloquent \ Model – Barry127

+0

아무 문제가 없지만 _that_ '별칭 '는 PHP 언어보다 상위 레벨, 특히 Laravel 응용 프로그램에 의해 제공됩니다. 그게 문제가된다면, 아마도'PHPUnit_Framework_TestCase'가 아니라'app/tests/TestCase.php'에서 확장하도록 테스트 케이스를 변경할 수 있습니다. 이 클래스는 Laravel 응용 프로그램의 부트 스트래핑 ('Eloquent'외관 포함) –

관련 문제