2013-09-09 2 views
0

У меня есть вопрос о насмешливый объект ...PHPUnit насмешливый вызов издевались метод в то же издевались над объектом

У меня есть класс «Пример», и мне нужно, чтобы проверить callMethod()

public function callMethod() { 
    $item = 0; 
    foreach($this->returnSomething() as $list) { 
    $item = $item + $list->sum; 
    } 
    return $item; 
} 

У меня есть тест метод, где я макет «returnSomething», чтобы вернуть мне некоторые данные, но проблема в том, что он не вызывает издевательский метод.

Это часть метода тестирования, где im mocking «returnSomething» и вызывает «callMethod».

$mock = mock("Example"); 
$mock->shouldReceive("returnSomething")->once()->withNoArgs()->andReturn($returnItems); 
$result = $mock->callMethod(); 

Можно ли назвать высмеивали «returnSomething» без изменения определения «callMethod» и пересылки $ фиктивного объекта в этот метод?

ответ

1

Можно высмеять только указанный метод.

Примеры:

Осмеяние:

$mock = \Mockery::mock("Example[returnSomething]"); 

РНРипхЬ:

$mock = $this->getMock('Example', array('returnSomething')); 

или

$mock = $this->getMockBuilder('Example') 
    ->setMethods(array('returnSomething')) 
    ->getMock(); 

С выше случаях пт работа будет издеваться только над методом returnSomething и оставить остальные методы, как в исходном объекте.

+1

Я считаю, что PHPUnit позволяет вам издеваться над всеми функциями, не устанавливая массив ('returnSomething'), но оставьте его пустым, чтобы все функции были издеваемы. Однако вы получите только одно возвращаемое значение. –

+2

Я понял вопрос таким образом: как высмеять только определенный метод из класса и оставить методы отдыха, как они есть в оригинальном классе. Я вижу, что мое выражение «вы можете высмеивать только указанный метод» сбивает с толку, смысл в том, что я имел в виду: «Можно высмеять только указанный метод». Спасибо, спасибо – Cyprian

+0

Нет проблем. Я думаю, что мы оба неправильно его читаем. –