Книга: Экстремальное программирование. Разработка через тестирование

Понятные данные (Evident Data)

Понятные данные (Evident Data)

Каким образом в тесте можно отразить назначение тех или иных данных? Добавьте в тест ожидаемый и реально полученный результат и попытайтесь сделать отношение между ними понятным. Вы пишете тесты не только для компьютера, но и для читателя. Через несколько дней, месяцев или лет кто-нибудь будет смотреть на ваш код и спрашивать себя: «Что имел в виду этот шутник, когда писал этот запутанный код?» Попробуйте оставить своему читателю как можно больше подсказок, имейте в виду, что этим разочарованным читателем можете оказаться вы сами.

Вот пример. Если мы конвертируем одну валюту в другую, мы берем комиссию 1,5 за выполнение операции. Представьте, что мы обмениваем американские доллары (USD) на британские фунты стерлингов (GBP). Пусть курс обмена будет составлять 2:1. Если мы хотим обменять $100, в результате мы должны получить 50 GBP – 1,5 % = 49,25 GBP. Мы могли бы написать следующий тест:

Bank bank = new Bank().

bank.addRate("USD", "GBP", STANDARD_RATE);

bank.commission(STANDARD_COMMISSION);

Money result = bank.convert(new Note(100, "USD"), "GBP");

assertEquals(new Note(49.25, "GBP"), result);

Однако вместо этого мы можем сделать порядок вычислений более очевидным:

Bank bank = new Bank();

bank.addRate("USD", "GBP", 2);

bank.commission(0.015);

Money result = bank.convert(new Note(100, "USD"), "GBP");

assertEquals(new Note(100 / 2 * (1–0.015), "GBP"), result);

Прочитав этот тест, я вижу взаимосвязь между входными значениями и значениями, используемыми в составе формулы.

Шаблон «Понятные данные» (Evident Data) обладает побочным эффектом: он в некоторой степени облегчает программирование. После того как мы в понятной форме записали выражение assert, мы получаем представление о том, что именно нам необходимо запрограммировать. В данном случае мы видим, что тестируемый код должен содержать операции деления и умножения. Мы даже можем воспользоваться шаблоном «Поддельная реализация» (Fake It), чтобы узнать, где должна располагаться та или иная операция.

Шаблон «Понятные данные» (Evident Data) выглядит как исключение из правила о том, что в коде не должно быть «магических» чисел. Дело в том, что в рамках одного метода легко понять назначение того или иного числа. Однако если в программе уже имеются объявленные символьные константы, я предпочитаю использовать их вместо конкретных численных значений.

Оглавление книги


Генерация: 1.271. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз