모의 객체와 반대로 phpunit을 사용하여 모의 클래스를 만드는 방법이 있습니까? 클래스를 생성자 (또는 어디서나)에서 작업해야 할 수도있는 모든 객체를 명시 적으로 전달하지 않고 종속성 삽입을 수행하는 방법을 찾고 있습니다. 이 모든 경우에 대해 "true"를 반환합니다 뭔가 :phpunit으로 모의 수업을 만드시겠습니까?
public function testAAAA()
{
$foo = $this->getMock('foo', array('bar'));
var_dump(class_exists('foo', false));
var_dump(method_exists('foo', 'bar'));
var_dump(method_exists($foo, 'bar'));
}
이 인쇄 :
bool(true)
bool(false)
bool(true)
성공적 가짜 'foo는'클래스를 생성 않았다 동안은 '줄을 결합하지 않은 것을 나타내는 '방법을 사용합니다.
저는 phpunit 3.7.5를 사용하고 있습니다.
필자는 필연적으로이 작업을 원한다고 말하지는 않겠지 만, 내가해야하는 작업입니다. 수만 개의 파일을 변경하지 않고 테스트 내에서 호출에 응답 할 모의 객체를 생성 할 수 있어야합니다. 이 getMockBuilder 메소드는 나를 가까이에 가져 오지만, phpunit이 네임 스페이스 모의 클래스 이름 (원래 포스트에서 언급 했어야하는 것을 사용하고있는 것)으로 호출 될 때 잘못된 평가 코드를 생성하는 것처럼 보입니다. –
'getMock()'호출 다음에'class_alias ('foo', 'quux \ baz')'와 같은'class_alias' 호출을 추가하고'quux \ baz'에 대해 테스트하십시오. 즉, 기본적으로 PHPUnit 패치를 적용하거나 ReflectionClass 및 ReflectionObject의 기능을 사용하여 객체 또는 클래스에 즉시 추가 할 수있는 시점에 있다고 생각합니다. 그러면 가장자리의 경우가 될 것입니다. 이것은 PHP가 빛나는 영역이 아닙니다. 또한 읽지 않은 경우 Michael Feathers의 "Legacy Code With Effective With Legacy Code"사본이 필요합니다. – jeremiahd
감사합니다. 나는 class_alias를 시도 할 것이다. 또한 PHPUnit을 패치하여 eval()에서 사용하는 템플릿을 수정합니다. 이 책에 관해서는, 내가 정말로 필요로하는 것은 상사가 읽을 것을 얻는 것이다. :) –