Тренинг по юнит-тестам (Partly Cloudy)
Задача
Посмотрите пиксаровский мультик "Partly cloudy"
В вашем мире, так же как и в мультике, новые существа рождаются из облаков (Cloud). Однако, какое существо появится у облака, зависит от погоды, времени суток, ветерка и т.п. Также, от того, кто родится, облако вызывает либо аиста либо демона, для того чтобы отнести дитё его счастливым родителям.
Детёныши бывают:
1. Щенок (Puppy)
2. Котёнок (Kitten)
3. Ёж (Hedgehog)
4. Медвежонок (Bearcub)
5. Поросёнок (Piglet)
6. Летучий Мыш (Bat)
7. Воздушный шарик (Balloon)
Погодные условия и время бывают такими:
1. Светило (Luminary): либо светит (isShiny) либо нет (относится и к солнцу и к луне).
2. Ветерок (Wind): бывает от 0 до 10км/ч
3. Время суток (Daylight): утро, полдень (noon), вечер, ночь
После создания существа облако вызывает у класса Magic один из следующих методов: CallStork (вызвать аиста) или CallDaemon (вызвать демона) и затем вызывает GiveBaby для передачи аисту или демону нового существа.
Текущая реализация облака такова:
class Cloud
{
private Daylight daylight = new Daylight();
private Luminary luminary = new Luminary();
private Wind wind = new Wind();
private Creature internalCreate()
{
if (daylight.current() == DaylightType.Night)
{
if (luminary.isShining())
{
return new Creature(CreatureType.Bat);
}
}
// TODO – implement all other creatures
throw new NotImplementedException();
}
public Creature create()
{
Creature creature = internalCreate();
Magic magic = new Magic();
magic.callDaemon(creature.getCreatureType());
return creature;
}
}
Составьте свою табличку зависимости получаемого существа и кто должен его донести до родителей:
Пример одной записи:
Что делать? Этапы
- Начните с документации: составьте свою табличку.
- Реализуйте интерфейсы, требуемые для реализации задачи. Предъявите интерфейс преподавателю
- На основе интерфейсов напишите тесты, проверяющие корректность реализации (функций, взаимодействия. Для тестов на взаимодействие потребуются моки, как обычные, так и динамические)
- Предъявите тесты преподавателю
- Реализуйте задачу. Обратите внимание, что реализацию облака надо подкорректировать, чтобы она позволяла замену «боевых» классов моками (вспомните пару, посвящённую мокам)
- Убедитесь, что все тесты проходят
- Сдайте задачу преподавателю. Преподаватель будет пытаться ввести такие значения или изменить код так, чтобы тесты не показали ошибки в программе