Юнит-тесты

Посмотрите пиксаровский мультик 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

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

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

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

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

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

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

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

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

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