2017-11-27 4 views
0

현재 쓰고있는 테스트는 어떤 이유로 든 채워진 멤버가있는 객체를 반환하지 않습니다.내가 지정한 정확한 값을 반환하도록 PHPUnit을 얻는 방법은 무엇입니까?

Mock_TestObject_28868d4d (10) (
    public 'id' -> null 
    ... 
) 

가 어떻게 원본을 반환 할 willReturn()를 얻을 수 있습니다 : 나는 호출되는 코드에서 $testObject를 살펴 때

$testObject = new TestObject(); 
$testObject->id = 1; 

$storerMock = $this->getMockBuilder(Storer::class) 
    ->setMethods(['get']) 
    ->disableOriginalConstructor() 
    ->getMock(); 
$storerMock->expects($this->once()) 
    ->method('get') 
    ->willReturn($testObject); 

, 나는 이런 식으로 뭔가를 참조하십시오 I는 다음과 같습니다 코드를 내가 돌아 오라고했거나, 적어도 id 회원으로 조롱 한 버전을 얻었습니까?

+0

나는 코드가 작동해야한다고 확신한다. 방금 만든 유사한 예제에서, 모의 메소드에서 반환 된 객체는 $ testObject와 완전히 동일하다. – iainn

답변

0

그 코드의 요점은 동일한 이름과 메소드 목록을 가진 코드를 생성하는 것이지만 동일한 클래스가 없으므로 DuckTyping을 수행 할 수 있습니다. 응답에 대한

$storerMock->expects($this->once()) 
    ->method('get') 
    ->will($this->returnValue($testObject); 
0

당신은 returnValue 기능을 사용하려고 했나. 그것은 잘못된 물건을 조롱하는 문제였습니다. 반환 유형이 설정되면 PHPUnit (PHP7과 함께)는 조롱 된 객체를 자동으로 반환합니다. 이 경우 메서드 서명

public function get(int $id): TestObject { 

이 올바르게 작동하고있었습니다. 그러나, TestObject을 조롱하는 대신 실제로는 TestObject2을 조롱했습니다. (따라서 반환 값을 설정하려고 할 때 TestObject 반환 값이 필요할 때 작업하지 않았기 때문에 작동하지 않았습니다. 올바른 모의 객체