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

От одного ко многим (One to Many)

От одного ко многим (One to Many)

Как реализовать операцию с коллекцией объектов? Сначала реализуйте эту операцию, манипулирующую единственным объектом, затем модернизируйте ее для работы с коллекцией таких объектов.

Например, предположим, что мы разрабатываем функцию, которая суммирует массив чисел. Мы можем начать с одного числа:

public void testSum() {

assertEquals(5, sum(5));

}

private int sum(int value) {

return value;

}

(Я добавил метод sum() в класс TestCase, чтобы не создавать новый класс ради одного метода.)

Теперь мы хотим протестировать sum(new int[] {5, 7}). Для начала добавим в метод sum() параметр, соответствующий массиву целых чисел:

public void testSum() {

assertEquals(5, sum(5, new int[] {5}));

}

private int sum(int value, int[] values) {

return value;

}

Этот этап можно рассматривать как пример применения шаблона «Изоляция изменения» (Isolate Change). После того как мы добавили параметр, мы можем менять реализацию, не затрагивая код теста.

Теперь мы можем использовать коллекцию вместо единственного значения:

private int sum(int value, int[] values) {

int sum = 0;

for (int i = 0; i < values.length; i++)

sum += values[i];

return sum;

}

Теперь можно удалить неиспользуемый параметр:

public void testSum() {

assertEquals(5, sum(new int[] {5}));

}

private int sum(int[] values) {

int sum = 0;

for (int i = 0; i < values.length; i++)

sum += values[i];

return sum;

}

Предыдущий шаг – это тоже демонстрация шаблона «Изоляция изменения» (Isolate Change). Мы изменили код и в результате можем менять тест, не затрагивая код. Теперь мы можем расширить тест, как планировали:

public void testSum() {

assertEquals(12, sum(new int[] {5, 7}));

}

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


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