El libro Crecimiento de software orientado a objetos ofrece varios ejemplos en jMock donde el estado se hace explícito sin exponerlo a través de una API. De veras me gusta esta idea. ¿Hay alguna manera de hacer esto en Mockito?¿Tiene mockito una expresión equivalente a los estados de jMock?
Aquí hay un ejemplo del libro
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);
}
}
De esta manera es más limpio que otra respuesta. +1 –
Mucho mejor que el jMock utilizado en el libro (que es genial, pero tiene algunos defectos). Constantemente hacen hincapié en la necesidad de hacer que el código de prueba sea fácil de entender, pero desde ese punto de vista, a juzgar por la perspectiva de mi novato de todos modos, Mockito parece muy superior. –
Sin embargo, 'SniperState' es una elección desafortunada de nombre ... porque el libro presenta su propia clase' SniperState' en p. 154 (y no es un simple 'enum') ... –