Как делают Вас регулярные выражения модульного теста?

Ваше значение заголовка неверно, поэтому оно не будет иметь никакого эффекта.

Cache-Control: 1728000

Это должно быть ...

Cache-Control: max-age=1728000

Также обратите внимание, что S3 полностью игнорирует .htaccess файлы.

См. Также https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control .

53
задан Patrick Schlüter 18 April 2016 в 03:11
поделиться

8 ответов

Необходимо всегда тестировать regexen, во многом как любой другой блок кода. Они самое большее просты функция, которая берет строку и возвращает bool или возвращает массив значений.

Вот некоторые предложения на том, что думать о когда дело доходит до разработки модульных тестов на regexen. Это не не надежные предписания для дизайна модульного теста, но некоторые инструкции для формирования взглядов. Как всегда, взвесьте потребности своего тестирования по сравнению со стоимостью отказа, сбалансированного со времени, требуемого реализовать их всех. (Я нахожу, что 'реализация' теста является легкой частью!:-])

Вопросы для рассмотрения:

  • Думают о каждой группе (круглые скобки) как изогнутая фигурная скобка.
  • Думают о каждом | как условие. Удостоверьтесь, что протестировали на каждое ответвление.
  • Думают о каждом модификаторе (*, +?) как другой путь.
  • (примечание стороны к вышеупомянутому: помнить различие между *, +? и *?, +?, и??.)
  • для \d, \s, \w, и их отрицание, дают несколько в каждом диапазоне попытка.
  • Для * и +, Вы не должны тестировать на 'никакое значение', 'один из', и 'один или несколько' для каждого.
  • Для важных символов 'управления' (например, строки в regex Вы ищете), тест для наблюдения, что происходит, если они обнаруживаются в неправильных местах. Это может удивить Вас.
  • , Если у Вас есть данные реального мира, используйте такое количество их, как Вы можете.
  • , Если Вы не делаете, удостоверьтесь, что протестировали и простые и сложные формы, которые должны быть допустимыми.
  • Удостоверяются, что протестировали то, что делают regex управляющие символы при вставке.
  • Удостоверяются, что проверили, что пустая строка правильно принята/отклонена.
  • Удостоверяются, что проверили, что строка каждого другого вида пробелов правильно принята или отклонена.
  • Удостоверяются, что правильное обращение нечувствительности к регистру сделано (я отмечают). Это имеет, укусил меня больше раз, чем почти что-либо еще в текстовом парсинге (кроме пробелов).
  • , Если у Вас есть x, m или s опции, удостоверьтесь, что Вы понимаете то, что они делают и тестируют на него (поведение здесь может отличаться)

Для regex, который возвращает списки, также помните:

  • Проверяют, что данные, которые Вы ожидаете, возвращаются, в правильном порядке, на правых сторонах поля.
  • Проверяют, что небольшие модификации не возвращают хорошие данные.
  • Проверяют, что смешанные анонимные группы и именованный синтаксический анализ групп правильно (например, (?<name> thing1 ( thing2) )) - это поведение может отличаться на основе regex механизма, который Вы используете.
  • Еще раз, дайте много пробных версий реального мира.

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

В зависимости от Вашей regex реализации библиотеки, способ, которым получены группы, может отличаться также. Perl 5 имеет 'открытое упорядочивание' порядка paren, C# имеет это частично за исключением именованных групп и так далее. Удостоверьтесь, что экспериментировали со своей разновидностью для знания точно, что она делает.

Затем интегрируйте их прямо в с Вашими другими модульными тестами, или в их собственном модуле или вместе с модулем, который содержит regex. Для особенно противного regexen можно найти необходимость в партиях и большом количестве тестов, чтобы проверить, что шаблон и все функции, которые Вы используете, корректны. Если regex составит большое (или почти все) работы, которую делает метод, то я буду использовать совет выше исходным данным вида для тестирования той функции а не regex непосредственно. Тот путь, если позже Вы решаете, что regex не является способом пойти, или Вы хотите разбить его, можно получить поведение regex, обеспеченный, не изменяя интерфейс - т.е., метод, который вызывает regex.

, пока Вы действительно знаете, как regex функция, как предполагается, работает в Вашей разновидности regex, необходимо смочь разработать достойные тестовые сценарии для него. Просто удостоверьтесь, что Вы действительно, действительно, действительно понимаете, как функция работает!

86
ответ дан 11 revs 7 November 2019 в 08:31
поделиться

Просто бросьте набор значений в нем, проверив, что Вы получаете правильный результат (является ли это match/no-match или конкретным заменяющим значением и т.д.).

Значительно, если существуют какие-либо угловые случаи, который Вы удивление , ли они будут работать или нет, получите их в модульном тесте и объясните в комментарии , почему они работают. Тем путем кто-то еще, кто хочет изменить regex, сможет проверить, что угловой случай все еще работает, и он даст подсказку им относительно того, как зафиксировать его, если он повреждается.

11
ответ дан Jon Skeet 7 November 2019 в 08:31
поделиться

По-видимому, Ваши регулярные выражения содержатся в рамках метода класса. Например:

public bool ValidateEmailAddress( string emailAddr )
{
    // Validate the email address using regular expression.
    return RegExProvider.Match( this.ValidEmailRegEx, emailAddr );
}

можно теперь записать тесты для этого метода. Я предполагаю, что точка, то, что regex является деталью реализации - Ваш тест должен протестировать интерфейс, который в этом случае является просто проверить почтовым методом.

9
ответ дан ng5000 7 November 2019 в 08:31
поделиться

Я создал бы ряд входных значений с ожидаемыми выходными значениями, во многом как любой тестовый сценарий.

кроме того, я могу полностью рекомендовать свободный Инструмент Regex Экспресс . Это - фантастический regex редактор/отладчик, который сохранил меня дни боли в прошлом.

3
ответ дан Andrew Rollings 7 November 2019 в 08:31
поделиться

Я всегда тестирую их так же, как я делаю любую другую функцию. Удостоверьтесь, что они соответствуют вещам, Вы думаете, что они должны соответствовать и что они не соответствуют вещам, они не были должны.

2
ответ дан Bill the Lizard 7 November 2019 в 08:31
поделиться

Я думаю, что простой вход ouput тест достаточен. С течением времени и некоторые случаи происходят, в котором перестал работать Ваш regex, не забывайте добавлять эти случаи к тесту также при фиксации.

1
ответ дан DaSteph 7 November 2019 в 08:31
поделиться

Мне нравится тестировать regexp против противоположного regex, я выполнюсь и против возможного теста и удостоверюсь, что пересечение пусто.

1
ответ дан mandel 7 November 2019 в 08:31
поделиться

Подумайте о том, чтобы сначала написать тесты, а затем написать столько регулярных выражений, сколько необходимо для прохождения каждого теста. Если вам нужно расширить ваше регулярное выражение, сделайте это, добавив неудачные тесты.

1
ответ дан 7 November 2019 в 08:31
поделиться
Другие вопросы по тегам:

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