Тренинг по юнит-тестам

Задача

Посмотрите пиксаровский мультик "Partly cloudy" http://www.youtube.com/

В вашем мире, так же как и в мультике, новые существа рождаются из облаков (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.getCurrent() == 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;
    }
}

Составьте свою табличку зависимости получаемого существа и кто должен его донести до родителей:

Освещение

Сила ветра

Время суток

Кто родится

Кого звать

Солнечно/лунно

0

Утро

Щенок

Аиста

Пасмурно

1 – 4

Полдень

Котёнок

Демона

 

5-9

Вечер

Шарик

 

 

10

Ночь

Ёж

 


Пример одной записи:

Освещение

Сила ветра

Время суток

Кто родится

Кого звать

Солнечно/лунно

10

Ночь

Летучий Мыш

Демона

Что делать? Этапы

1.      Реализуйте интерфейсы, требуемые для реализации задачи. Предъявите интерфейс преподавателю

2.      На основе интерфейсов напишите тесты, проверяющие корректность реализации (функций, взаимодействия. Для тестов на взаимодействие потребуются моки, как обычные, так и динамические)

3.      Предъявите тесты преподавателю

4.      Реализуйте задачу. Обратите внимание, что реализацию облака надо подкорректировать, чтобы она позволяла замену «боевых» классов моками (вспомните пару, посвящённую мокам)

5.      Убедитесь, что все тесты проходят

6.      Сдайте задачу преподавателю. Преподаватель будет пытаться ввести такие значения или изменить код так, чтобы тесты не показали ошибки в программе

Comments