2016-09-02 2 views
0

Я немного привязан.Необходимый код для тестирования модулей тестирования, который не тестируется

У нас есть код PHP-кода, написанный разработчиком, который необходимо реорганизовать. Однако он имеет нулевые тесты. Поэтому я боюсь реорганизовать это.

Я писал модульные тесты, но много кода зависит от параметров $ _GET, когда он должен использовать класс Request (он был построен в Lumen).

Таким образом, выполнение единичных тестов невозможно.

Какие у меня варианты? Я мог бы отредактировать код, так что $ _GET больше не используется, но как код является структурой, очень рискованно это делать.

Самое забавное, что мы хотим написать тесты, чтобы мы могли реорганизовать, но, похоже, для того, чтобы писать тесты, я должен все-таки сделать рефакторинг.

Любые идеи будут оценены.

+1

'' но, похоже, для того, чтобы писать тесты, я должен все-таки сделать рефакторинг ». - В общем, да. Если код не был спроектирован так, чтобы его можно было тестировать, его необходимо изменить, чтобы его можно было проверить. – David

+0

Вы можете форсировать значения '$ _GET'. –

+0

Дэвид, вот что я боюсь. @JonStirling, как бы вы предложили мне это сделать? – Housni

ответ

1

Я бы попытался начать интеграционные или приемочные испытания. Тогда у вас есть что-то на месте, что дает вам немного уверенности в том, чтобы переписать код, чтобы его можно было протестировать с помощью модульных тестов. К сожалению, можно написать код, который не может быть проверен модулем.

Посмотрите на «Внешнее тестирование».

+1

Это звучит как наиболее правдоподобное решение. Я серьезно рассматривал это, но я хотел посмотреть, есть ли лучшие альтернативы. Внешнее тестирование: я собираюсь это сделать Google. – Housni

0

Просто некоторые дикие мысли. Можно ли написать единичный тест таким образом, чтобы он мог абстрагировать тип запроса, я имею в виду, чтобы написать базовый класс, скажем, RequestBase, а затем дочерний класс для оболочки класса запроса (LumenRequest) и другого дочернего класса (LegacyRequest), чтобы обернуть $ _GET, чтобы они имели один и тот же интерфейс. Со старым кодом вы запускаете тест с помощью LegacyRequest и с новым кодом, вы запускаете его с помощью LumenRequest

+0

Мне все равно придется реорганизовать это. Вот что, маршрутизатор вызывает метод контроллера, который затем вызывает некоторые другие классы. Это не просто наследование, а фактические контроллеры, созданные из других контроллеров. – Housni

Смежные вопросы