Тестирование в phpUnit Mock-объектами

233
27 сентября 2017, 11:40

Допустим, в тестируемом классе есть несколько публичных методов:

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]. С тестами первого метода всё в порядке, они не пройдут и я сразу решу эту проблему. Но тесты второго получают эмулированные исходные данные, которые уже неактуальны.

Какая есть возможность/стратегия обезопасить себя от такой ситуации?

READ ALSO
Обработка групп элементов формы при ее отправке POST методом

Обработка групп элементов формы при ее отправке POST методом

имеется форма со случайным кол-ом групп элементов, в каждой группе 3 элемента:

142
Объединение периодов

Объединение периодов

Очень сложно описать задачу, которую мне нужно решить, но я постараюсь

123
Ошибка компиляции LNK1104

Ошибка компиляции LNK1104

При сборке проекта в VS 2015 происходит Ошибка LNK1104 не удается открыть файл "MSCOREElib"

331