Насмешка PHP функционирует в модульных тестах

Для меня самое большое преимущество для re.compile является способностью разделить определение regex от его использования.

Даже простое выражение такой как 0|[1-9][0-9]* (целое число в основе 10 без начальных нулей) может быть достаточно сложным, который Вы не должны перепечатывать его, проверить, сделали ли Вы какие-либо опечатки, и позже должны перепроверить, существуют ли опечатки, когда Вы начинаете отлаживать. Плюс, более хорошо использовать имя переменной, такое как цифра или num_b10, чем 0|[1-9][0-9]*.

, конечно, возможно сохранить строки и передать их re.match; однако, это меньше читаемо:

num = "..."
# then, much later:
m = re.match(num, input)

По сравнению с компиляцией:

num = re.compile("...")
# then, much later:
m = num.match(input)

, Хотя это довольно близко, последняя строка вторых чувств, более естественных и более простых, когда используется неоднократно.

12
задан avdgaag 7 August 2009 в 14:13
поделиться

1 ответ

Не в автоматическом режиме. Что вы можете сделать, так это написать свой код таким образом, чтобы внешние зависимости были заключены в объекты, которые передаются извне. В производственной среде вы просто подключите настоящие адаптеры, но во время тестирования вы можете подключить их к заглушкам или имитаторам.

Если вы действительно настаиваете, вы можете использовать расширение runkit , которое изменяет php модель программирования, чтобы вы могли переопределять классы и функции во время выполнения. Однако это внешнее и нестандартное расширение, так что имейте это в виду. Стандарт deacto - это ручной подход, как я описал выше.

10
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: