@Test public void triesToBeatTheLatestHighestBid() throws Exception { final Money expectedBid = beatableBid.add(increment); sniper.bidAccepted(beatableBid); new Verifications() { { auction.bid(expectedBid); } }; }
@Test public void triesToBeatTheLatestHighestBid() throws Exception { final Money expectedBid = beatableBid.add(increment); context.checking( new Expectations() { { oneOf(auction).bid(expectedBid); } }); sniper.bidAccepted(beatableBid); }
public final class AuctionSniper_JMockit_Test { final Money increment = new Money(2); final Money maximumBid = new Money(20); final Money beatableBid = new Money(10); final Money unbeatableBid = maximumBid.add(new Money(1)); @Mocked Auction auction; @Mocked AuctionSniperListener listener; AuctionSniper sniper; @Before public void init() { sniper = new AuctionSniper(auction, increment, maximumBid, listener); } @Test public void triesToBeatTheLatestHighestBid() throws Exception { final Money expectedBid = beatableBid.add(increment); sniper.bidAccepted(beatableBid); new Verifications() { { auction.bid(expectedBid); } }; } @Test public void willNotBidPriceGreaterThanMaximum() throws Exception { sniper.bidAccepted(unbeatableBid); new Verifications() { { auction.bid((Money) any); times = 0; } }; } @Test public void willLimitBidToMaximum() throws Exception { sniper.bidAccepted(maximumBid.subtract(new Money(1))); new Verifications() { { auction.bid(maximumBid); } }; } @Test public void willAnnounceItHasFinishedIfPriceGoesAboveMaximum() { sniper.bidAccepted(unbeatableBid); new Verifications() { { listener.sniperFinished(sniper); } }; } @Test public void catchesExceptionsAndReportsThemToErrorListener() throws Exception { final AuctionException exception = new AuctionException("test"); new Expectations() { { auction.bid((Money) any); result = exception; } }; sniper.bidAccepted(beatableBid); new Verifications() { { listener.sniperBidFailed(sniper, exception); } }; } }
/** * This and other classes in this package (except, naturally, AuctionSniper_JMockit_Test) are based * on the original source code available <a * href="http://svn.jmock.codehaus.org/browse/jmock/trunk/jmock2/example/org/jmock/example/sniper">here</a>. * Small modifications were made to simplify the code, without compromising the original design. */ @RunWith(JMock.class) public final class AuctionSniperTest { final Mockery context = new JUnit4Mockery(); final Money increment = new Money(2); final Money maximumBid = new Money(20); final Money beatableBid = new Money(10); final Money unbeatableBid = maximumBid.add(new Money(1)); final Auction auction = context.mock(Auction.class); final AuctionSniperListener listener = context.mock(AuctionSniperListener.class, "listener"); final AuctionSniper sniper = new AuctionSniper(auction, increment, maximumBid, listener); @Test public void triesToBeatTheLatestHighestBid() throws Exception { final Money expectedBid = beatableBid.add(increment); context.checking( new Expectations() { { oneOf(auction).bid(expectedBid); } }); sniper.bidAccepted(beatableBid); } @Test public void willNotBidPriceGreaterThanMaximum() throws Exception { context.checking( new Expectations() { { ignoring(listener); never(auction).bid(with(any(Money.class))); } }); sniper.bidAccepted(unbeatableBid); } @Test public void willLimitBidToMaximum() throws Exception { context.checking( new Expectations() { { exactly(1).of(auction).bid(maximumBid); } }); sniper.bidAccepted(maximumBid.subtract(new Money(1))); } @Test public void willAnnounceItHasFinishedIfPriceGoesAboveMaximum() { context.checking( new Expectations() { { exactly(1).of(listener).sniperFinished(sniper); } }); sniper.bidAccepted(unbeatableBid); } @Test public void catchesExceptionsAndReportsThemToErrorListener() throws Exception { final AuctionException exception = new AuctionException("test"); context.checking( new Expectations() { { allowing(auction).bid(with(any(Money.class))); will(throwException(exception)); exactly(1).of(listener).sniperBidFailed(sniper, exception); } }); sniper.bidAccepted(beatableBid); } }