2017-01-25 4 views
0

Я пытаюсь выполнить тест phpUnit для функции A, которая вызывает другую функцию B внутри нее, как я могу заменить возврат функции B, чтобы продолжить успешно мой тестКак заменить возврат на функцию

public function A($parameter = null){ 
// do something 
$response_B = $this->B(); 
// continue with the function A 
} 

Примечание: функция B делает запрос в SQL в базу данных. В моем тесте я не хочу делать какие-либо запросы, просто хочу предварительно определить результат функции B. Я пробовал с помощью Mocks и Stubs, но, действительно, я не понимаю его полностью. Пожалуйста, извините с моим английского

+1

Что вы имеете в виду 'заменить возвращение функции b'? Попробуйте добавить образец кода, чтобы помочь нам лучше понять. – Antony

+0

Можете ли вы загрузить свой код, пожалуйста? – Svekke

+0

Вы можете использовать светильники или макет, но, не зная, что вы действительно хотите сделать, вам трудно помочь – Oliver

ответ

0

Примером функции:

function pass(){ 
$test = check(3); 
return $test; //returns true when 3 is parameter used to call function check() 
} 

function check($int) { 
if ($int == 3) { 
return true; 
} else { 
return false; 
} 
0

так, что вы хотите, называется «Mocking», и это не будет работать с простой функцией.

, чтобы сделать его простым. (Код не проверялось)

class MySpecialClass 
{ 
public function doSomeSpecialThings(){ 
    $response = $this->doFancySQL(); 
    return $response; 
} 
} 

так что если вы хотите, чтобы манипулировать вызов метода, вы должны извлечь его внешний класс и ввести его

class MySpecialClass 
{ 
    public function setFancySqlInterface(FancySqlInterface $fancySqlInterface){ 
$this->fancySqlInterface = $fancySqlInterface; 
} 
public function doSomeSpecialThings(){ 
    $response = $this->fancySqlInterface->doFancySQL(); 
    return $response; 
} 
} 

с этим, теперь вы можете использовать метод setFancySqlInterface в своем тесте с поддельным классом, который возвращает конкретный ответ.

вы можете либо создать фальшивый класс или использовать «Mocking Framework» для выполнения этой задачи

в качестве примера, вы можете увидеть здесь

https://github.com/BlackScorp/guestbook/blob/master/tests/UseCase/ListEntriesTest.php#L35, что я создал поддельные объекты и добавил их в Фиктивное хранилище https://github.com/BlackScorp/guestbook/blob/master/tests/UseCase/ListEntriesTest.php#L70

надеюсь, вы понимаете, что я имею в виду: D