Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Prostyprzykład:HelloDI!
varwriter=newSpyMessageWriter();
varsut=newSalutation(writer);
sut.Exclaim();
Assert.Equal(
expected:"HelloDI!",
actual:writer.WrittenMessage);
27
zależnośćIMessageWriterjest
podmienionazapomocąobiektutypuSpy
SpyMessageWriter
}
publicclassSpyMessageWriter:IMessageWriter
{
publicstringWrittenMessage{get;privateset;}
publicvoidWrite(stringmessage)
{
this.WrittenMessage+=message;
}
}
Klasa
Salutation
potrzebujeinstancjiinterfejsu
IMessageWriter
,więctrzebago
stworzyć.Możnabyużyćjakiejkolwiekimplementacji,alewtestachjednostkowych
obiektuzastępczegointerfejsmożebyćprzydatnywtymprzypadkuwprowadzasię
swojąwłasnąimplementacjęobiektutypuSpy14.
Wtymprzypadkuobiektzastępczyjestużywanytakjakprodukcyjnaimplemen-
tacja.Toskutektego,żetenprzykładjestprosty.Wwiększościaplikacjiobiekttypu
TestDoublejestznacznieprostszyniżkonkretneprodukcyjneimplementacje,które
zastępuje.Ważne,byprzekazaćtestowąimplementację
IMessageWriter
wcelu
upewnieniasię,żetestujesiętylkojedenelementnaraz.Teraztestowanajestmetoda
Exclaim
klasy
Salutation
,więcniechcemy,żebyprodukcyjnaimplementacja
IMessageWriter
zaśmiecałatentest.Żebystworzyćklasę
Salutation
,przeka-
zujesięinstancjęobiekttypuSpydla
IMessageWriter
,używając
WSTRZYKIWANIA
KONSTRUKTOREM
.
PowykonaniutestównaSUTmożnawywołać
Assert.Equal
,żebyzweryfikować,
czyoczekiwanywynikpokrywasięzprawdziwymwynikiem.Jeśliwywołanometodę
IMessageWriter.Write
złańcuchaznakówHelloDI!”,
SpyMessageWriter
mógłprze-
chowywaćwswojejwłaściwości
WrittenMessage
iasercjaEqualkończysiębezbłędu.
Alejeślimetoda
Write
niebyławywołanalubbyła,alezinnąwartością,wyrzuciona
wyjątekiwrezultacietestsięniepowiedzie.
Luźnewiązanieprzynosiwielekorzyści:kodjestowielełatwiejrozwijać,utrzymy-
wać,rozszerzaćistajesięonowielebardziej
TESTOWALNY
.Tatechnikaniejestteż
zbytniotrudna.Programujemydointerfejsów,aniedokonkretnychimplementacji.
Jedynymdużymproblememjestwyczucie,jakzarządzaćinstancjamitychinterfejsów.
DI
pokonujetakieprzeszkodyprzezwstrzykiwanie
ZALEŻNOŚCI
zzewnątrz.Mimoże
14
ObiekttypuSpyjestobiektemtypuTestDouble,którywychwytujepośrednieodwołaniadoinnego
komponentuprzezSUTdlapóźniejszejweryfikacjiprzeztest.Zob.G.Meszaros,op.cit.,538.