У меня есть класс, который имеет два открытых метода. Это выглядит примерно так:
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()
но без удачи.
Итак, мне интересно, возможно ли смоделировать функцию, которая вызывается внутри метода тестирования?
Тебе необходимо частичная насмешка (фиктивный объект, в котором некоторые методы заглушены, а остальные оставлены как есть). Так как я сделал это только с собственной фиктивной библиотекой phpunit, я могу только указать вам на документацию, но, похоже, вам следует просто добавить ->makePartial()
к вашему ложному воплощению
Других решений пока нет …