Подход к юнит-тестированию больших партий динамически генерируемых строк - PullRequest
1 голос
/ 06 июня 2011

В моем веб-приложении есть класс для анализа и манипулирования данными, хранящимися в хэше URL-адреса, которые выглядят примерно так:

http://myapp.com/#!/location/hornsea/season/spring/facilities/+shop+swimming-airport/size/50

Для возможности модульного тестирования различных перестановок я храню некоторые URL-фрагменты в объекте (например,

var fragments {
    valid: ["/location/hornsea", "/season/winter","/size/50"],
    invalid: ["location/hornsea", "/seasonwinter","/size/fifty"]
}

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

Это нормально, когда я запускаю тест на достоверность URL, так как я просто проверяю true или false в моем методе isValid (), но при тестировании на получение параметров из URL я не знаю как чтобы подойти к проблеме - мне нужно сравнить возвращаемое значение (например, {location: "hornsea" "}) с ожидаемым значением, но так как анализируемая строка динамически создается перед запуском теста, у меня нет ожидаемого значения хранится где угодно.

Теперь я не уверен, является ли мой подход излишним - нужно ли мне проверять все методы на всех возможных структурах url? Могу ли я настроить тесты, которые запускаются со всеми возможными URL-адресами, когда это легко сделать, но работать с более управляемым подмножеством, когда мне нужен более точный контроль над тестами, и все же удается охватить все возможные варианты. то есть я мог бы написать набор тестов, в котором тестирование

http://myapp.com/season/autumn

достаточно для того, чтобы охватить и такие примеры, как следующие.

http://myapp.com/location/dungeness/season/autumn
http://myapp.com/location/camberwell/seasonautumn

И как я могу быть уверен, что я не оставил никаких пробелов? Существуют ли общие подходы к решению проблемы такого рода или это что-то очень специфичное для конкретного приложения?

1 Ответ

0 голосов
/ 06 июня 2011

Вы можете проверить это с помощью обратной функции .Вы должны написать функцию (кодировать), которая является обратной функцией для вашего анализатора URL.Функция кодирования создает URL-адрес из допустимых значений ввода.Тест имеет вид:

input = {"location" : "hornsea", "season" : "winter", "size" : "50"}
assert input == parse(encode(input))

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

...