Książka Rosnące oprogramowanie zorientowane obiektowo podaje kilka przykładów w jMock, gdzie stan jest jawny bez ujawniania go za pośrednictwem interfejsu API. Naprawdę podoba mi się ten pomysł. Czy jest sposób, aby to zrobić w Mockito?Czy mockito ma odpowiednik idiomu dla stanów jMock?
Oto przykład z książki
public class SniperLauncherTest {
private final States auctionState = context.states("auction state")
.startsAs("not joined");
@Test public void addsNewSniperToCollectorAndThenJoinsAuction() {
final String itemId = "item 123";
context.checking(new Expectations() {{
allowing(auctionHouse).auctionFor(itemId); will(returnValue(auction));
oneOf(sniperCollector).addSniper(with(sniperForItem(item)));
when(auctionState.is("not joined"));
oneOf(auction).addAuctionEventListener(with(sniperForItem(itemId)));
when(auctionState.is("not joined"));
one(auction).join(); then(auctionState.is("joined"));
}});
launcher.joinAuction(itemId);
}
}
ten sposób jest czystsze niż inne odpowiedzi. +1 –
Znacznie lepiej niż jMock użyty w książce (co jest świetne, ale ma kilka wad). Nieustannie podkreślają potrzebę uczynienia kodu testowego łatwym do uchwycenia, ale z tego punktu widzenia, sądząc z perspektywy mojego początkującego, Mockito wydaje się znacznie lepszy. –
Jednak 'SniperState' jest niefortunnym wyborem nazwy ... ponieważ książka wprowadza własną klasę' SniperState' na s. 154 (i to nie jest proste 'enum') ... –