среда, 20 января 2016 г.

Юнит тесты...

В своем проекте я некоторое время назад использовал сторонний компонент XComboBox и наполнил его список доступных элементов вот таким образом:

            foreach(object obj in list) {
                comboBox.Items.Add(obj.Name);
            }

Однако через очень небольшое время один из пользователей сообщил мне, что некоторые тексты с символами HTML разметки показываются неверно. Это частая ошибка в разработке веб приложений и решается она довольно легко с помощью вызова всего лишь одного метода:

            foreach(object obj in list) {
                comboBox.Items.Add(HttpUtility.HtmlEncode(obj.Name));
            }

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

Однако недавно пришел другой клиент и сообщил, что моя программа замечательная, только некоторые символы его родного турецкого языка она превращает в "ü"... Видимо опять кодировка... Но тесты ведь ходят... Как же так?
Оказывается, разработчики контрола рассмотрели необходимость явного кодирования текстов в коде приложений и в последней версии контрол сам выполняет это кодирование. Мне нужно просто удалить свой вызов этого метода.
Эта ситуация не входит в круг задач, которые решают юнит тесты: мой метод по прежнему работает в соответствии с определенной для него спецификацией. Произошли внешние изменения, которые должны были вылиться в изменение спецификации на мой код. Быстрая и внутренняя обработка таких ситуаций - это задача для другого инструмента обеспечения качества, нацеленного именно на долгосрочные проекты, мигрирующие на новые версии компонент, браузеров или операционных систем.