Допустим, в тестируемом классе есть несколько публичных методов:
class Sample {
function method1() {
return [1,2,3];
}
function method2($id) {
return (in_array($id, $this->method1()));
}
}
method2 зависит от результатов method1.
Создаю тесты для первого метода, в котором гоняю его с разными наборами исходных значений. Потом берусь за тесты для второго метода, в котором эмулирую результаты работы первого:
$mock = $this->getMockBuilder(Sample::class)
->disableOriginalConstructor()
->setMethods(['method1'])
->getMock();
$mock->method('method1')->willReturn([1,2,3]);
$this->assertTrue($mock->method2(1));
А теперь вопрос:
Когда-нибудь в далеком будущем в результате рефакторинга я решаю, что результат работы первого метода должен выводиться в виде [1=>true,2=>true,3=>true]. С тестами первого метода всё в порядке, они не пройдут и я сразу решу эту проблему. Но тесты второго получают эмулированные исходные данные, которые уже неактуальны.
Какая есть возможность/стратегия обезопасить себя от такой ситуации?
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники