2013-10-08 1 views
3

В phpspec я могу высмеять возвращаемое значение метода?phpspec - mocking возвращаемое значение метода

, например:

class MyClass() 
{ 
    public function getStaffMemberNames() 
    { 
     // db call to get array of staff member names 
    } 

    public function sortStaffMemberNames() 
    { 
     return sort($this->getStaffMemberNames()); 
    } 
} 

Я заинтересован в тестировании метода sortStaffMemberNames. Но он полагается на другой метод класса, который использует соединение db. Я хочу издеваться над getStaffMemberNames, поэтому я могу легко протестировать.

Как это можно достичь?

ответ

2

В phpspec нет частичных издевок (вы не можете издеваться над тестируемым классом). Это плохая практика.

Вы должны издеваться над своими сотрудниками (например, подключение к базе данных).

+0

Плохая практика? Так что лучше издеваться над вызовом базы данных в каждом отдельном методе, который использует метод getStaffMemberNames()? – martindilling

+1

phpspec пытается обеспечить соблюдение некоторых практик, среди которых принцип единой ответственности. В вашем случае «sortStaffMemberNames()» имеет свою собственную ответственность (сортировку) и должен быть извлечен в новый объект и получить результат «getStaffMemberNames» в качестве параметра. –

+0

Точно. Всякий раз, когда что-то усложняется с помощью phpspec, это указывает на то, что у вас проблемы с дизайном. –