Юнит-тесты

Посмотрите пиксаровский мультик http://www.youtube.com/watch?v=-a6Pe1ovKHg

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

Текущая реализация облака такова:

type Cloud() =

    let daylight = new Daylight()

    let luminary = new Luminary()

    let wind = new Wind()

 

    member x.InternalCreate() =

      if daylight.Current = DaylightType.Night then

        if luminary.IsShining() then

          new Creature(CreatureType.Bat)

      // TODO – implement all other creatures

        else

          raise <| new System.NotImplementedException()

      else

        raise <| new System.NotImplementedException()

 

    member x.Create() =

      let creature = x.InternalCreate()

      let magic = new Magic()     

      magic.CallCourier(creature.CreatureType).GiveBaby(creature)

      creature

 

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

Освещение

Сила ветра

Время суток

Кто родится

Кого звать

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

0

Утро

Щенок

Аиста

Пасмурно

1 – 4

Полдень

Котёнок

Демона

 

5-9

Вечер

Шарик

 

 

10

Ночь

Ёж

 


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

Освещение

Сила ветра

Время суток

Кто родится

Кого звать

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

10

Ночь

Летучий Мыш

Демона

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

1.      Реализуйте интерфейсы, требуемые для реализации задачи (без реализации). Предъявите интерфейсы преподавателю (АТД DaylightType и CreatureType, интерфейсы IDaylight, ILuminary, IWind, IMagic)

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

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

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

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

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

Comments