PV178/02 Domácí úkol 5

Unit Tests

Část 1

Změna 7.4.2011 - Tyto testy počkají, až budete mít stabilní model tříd.

Část 2

Rady

Vytvoření unit testu ve Visual Studiu

Sledování pokrytí kódu testy - Code Coverage

Metody pro Unit testy

Rhino Mocks

Pro použití Rhino Mocks musíte do projektu s testy přidat referenci na knihovnu Rhino.Mocks.dll. Knihovnu si můžete stáhnout z učebních materiálů v ISu.

Ukázka vytvoření stubu a práce se stubem trochu jinak než na cvičení: vrácení hodnoty vlastnosti, simulace metody vracející hodnotu závislou na parametru a vyhození výjimky. Na zvýrazněné části si dejte pozor. Část tohoto kódu je z testu metody Enqueue.

MockRepository mocks = new MockRepository();

// vytvoreni stub pro IPriorityPlanner
IPriorityPlanner agePriorityPlanner = mocks.Stub<IPriorityPlanner>();

// Naucime stub co potrebujeme. Muzeme to udelat pomoci LastCall jako v ukazce
// ze cviceni nebo pomoci rozsirujici metody Expect.
agePriorityPlanner
.Expect(p => p.MaximumPriority)    // ocekavane volani (tady je to volani vlastnosti)
.Repeat.Any()                      // kolikrat se muze/musi volat (libovolne krat)
.Return(10);                       // navratovat hodnota (vraci 10)

// Tato falesna metoda simuluje volani ComputePriority, ktere vraci jako
// prioritu osoby jeji vek za predpokladu, ze ji byla predana instance tridy Person. 
// Proto ale musi zpracovat svuj vstupni parameter.
agePlanner
.Expect(p => p.ComputePriority(Arg<Person>.Is.NotNull))                  // omezeni (vztahuje se jen na volani ComputePriority kdy parameter není null)
.WhenCalled(mi => mi.ReturnValue = ((Person)mi.Arguments[0]).Age)        // vypocet navratove hodnoty (mi.Arguments obsahuje parametry metody ComputePriority)
.Repeat.Any()                                                            // opakovani
.Return(0);                                                              // ignoruje se, navratova hodnota vyresena o 2 radky vyse

// Opet falesna metoda ComputePriority. Tentokrat ale definujeme jeji chovani, 
// pokud je ji predan parametr null.
agePriorityPlanner
.Expect(p => p.ComputePriority(Arg<Person>.Is.Null))
.Repeat.Any()
.Throw(new ArgumentNullException());

// povolit prehrani mocku

agePriorityPlanner.Replay();

... zbytek testu