Издевательский публичный метод тестирования объекта

У меня есть класс, который имеет два открытых метода. Это выглядит примерно так:

class IntRequest
{
public function updateStatus()
{
$isValid = $this->checkValidity();

// ... next is a complex logic that use $isValid
}

/**
* @return bool
*/
public function isValid()
{
// another complex logic
}
}

Мне нужно проверить первую функцию — IntRequesr::updateStatus; Однако мне нужно бежать на тесты. Первый с IntRequests::isValid возвращается false а второй с true как результат IntRequests::isValid

Я пытаюсь смоделировать эту функцию, но тесты запускаются с вызовом фактического IntRequests::isValid не издевались.

Мой тестовый код

$intRequest = new IntRequests;

$mock = m::mock($intRequest);
$mock->shouldReceive('isValid')
->once()
->andReturn(true);

$res = $mock->updateStatus();

$this->assertTrue($res);

Я пытаюсь позвонить $res = $intRequest->updateStatus() вместо $res = $mock->updateStatus() но без удачи.

Итак, мне интересно, возможно ли смоделировать функцию, которая вызывается внутри метода тестирования?

1

Решение

Тебе необходимо частичная насмешка (фиктивный объект, в котором некоторые методы заглушены, а остальные оставлены как есть). Так как я сделал это только с собственной фиктивной библиотекой phpunit, я могу только указать вам на документацию, но, похоже, вам следует просто добавить ->makePartial() к вашему ложному воплощению

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]