2016-02-11 5 views
0

Как я могу издеваться над классом внутри метода другого класса?PHPUnit - Как издеваться над классом внутри метода другого класса?

Например,

protected function buildRequest($params) 
{ 
    return new \Request(); 
} 

public function getPayload($params) 
{ 
    $request = $this->buildRequest($params); 
    .... 
} 

Могу ли я издеваться buildRequest?

Мне нужно, чтобы проверить этот метод getPayload($params), но я получаю эту ошибку:

Class 'Request' not found in... 

ответ

2

Одним из вариантов являются введением завода, который создаст Request экземпляра, и ввести завод в свой класс. Вы могли бы заглушить завод и все, что он создает.

Другой вариант - расширить класс, который вы тестируете, переопределить метод buildRequest(), чтобы вернуть макет и протестировать ваш класс с помощью этого расширения.

Наконец, PHPUnit предлагает вам возможность создавать так называемые частичные издевается:

$request = new \Request(); 
$params = [1, 2, 3]; 

$foo = $this->getMock(Foo::class, ['buildRequest']); 
$foo->expects($this->any()) 
    ->method('buildRequest') 
    ->with($this->equalTo($params)) 
    ->willReturn($request); 

$payload = $foo->getPayload($params); 

Однако ваш Request класс, кажется, не существует, или быть автоматически загружаются. Сначала вам нужно решить эту проблему.

+0

Спасибо за ответ. Будет работать над этой идеей! : D – laukok

Смежные вопросы