Домашнее задание к лекции 5.3 «Разработка через тестирование»
Перед началом работы
- Постарайтесь не читать все задания сразу.
- Делайте задачи по порядку, одну за раз. Фишка в том, чтобы научиться работать поэтапно.
- Тестируйте только корректные входные данные. В рамках данного задания не требуется тестировать невалидные входные данные.
Задача №1
Создайте простой строчный калькулятор при помощи функции add(numbers)
, где numbers
это строка, содержащая число:
- Функция может принимать в качестве аргумента строку с цифрами
0
, 1
и 2
и должна возвращать их сумму. Например:
, 1
или 1,2
. В случае пустого аргумента значением будет 0
.
- Начните с простых тестов на пустой аргумент и затем переходите к одной и двум цифрам.
- Решайте задачу как можно проще, пишите тестовые кейсы о которых до этого не задумывались.
- Не забывайте проводить рефакторинг кода после каждого пройденного теста.
Задача №2
Добавьте возможность функции add
обрабатывать неизвестное количество чисел.
Задача №3
Добавьте функции add
возможность обрабатывать перенос строки между числами (не только запятую).
- Такой ввод допустим:
1\n2,3
(вернет 6);
- Такой ввод не допустим:
1,\n
. Нет необходимости это доказывать, просто поясните.
Задача №4
Добавьте поддержку различных разделителей.
- При изменении разделителя после него и перед началом аргумента будет содержаться перенос строки:
//<разделитель>\n[числа…]
. Например, результатом работы функции с аргументом //<;>\n1;2
должно быть число 3 и разделителем по умолчанию будет ;
.
- Первая строка является опциональной. Все сценарии ввода по прежнему должны поддерживаться.
Задача №5
В случае вызова функции add
с отрицательным числом должно бросаться исключение с сообщением Отрицательные числа не допустимы.
и далее отрицательное число, которое было введено. Если передано несколько отрицательных чисел, то выбрасить исключение с сообщением, содержащим все недопустимые значения.
Задача №6 (дополнительная)
- Числа больше 1000 должны быть проигнорированы. Выражение
2 + 1001
будет равно 2.
- Разделители могут быть любой длины при условии соблюдения формата
//<разделитель>\n
. Например, //<***>\n1***2***3
должно вернуть 6.
- Добавьте возможность использовать разные разделители, указанные в формате
//<разделитель1><разделитель2>\n
. К примеру, //<*><%>\n1*2%3
должно вернуть 6.
- Убедитесь, что вы можете поддерживать сценарии, в которых участвует любое количество разделителей с любым количеством символов в каждом.