@Before public void setupMock() { productService = new ProductService(); product = mock(Product.class); productDao = mock(ProductDao.class); productService.setProductDao(productDao); }
@Test public void testBuy() throws InsufficientProductsException { int availableQuantity = 30; System.out.println("Stubbing getAvailableProducts(product) to return " + availableQuantity); when(productDao.getAvailableProducts(product)).thenReturn(availableQuantity); System.out.println("Calling ProductService.buy(product," + purchaseQuantity + ")"); productService.buy(product, purchaseQuantity); System.out.println("Verifying ProductDao(product, " + purchaseQuantity + ") is called"); verify(productDao).orderProduct(product, purchaseQuantity); System.out.println("Verifying getAvailableProducts(product) is called at least once"); verify(productDao, atLeastOnce()).getAvailableProducts(product); System.out.println( "Verifying order of method calls on ProductDao: First call getAvailableProducts() followed by orderProduct()"); InOrder order = inOrder(productDao); order.verify(productDao).getAvailableProducts(product); order.verify(productDao).orderProduct(product, purchaseQuantity); }
@Test(expected = InsufficientProductsException.class) public void purchaseWithInsufficientAvailableQuantity() throws InsufficientProductsException { int availableQuantity = 3; System.out.println("Stubbing getAvailableProducts(product) to return " + availableQuantity); when(productDao.getAvailableProducts(product)).thenReturn(availableQuantity); try { System.out.println( "productService.buy(product" + purchaseQuantity + ") should throw InsufficientProductsException"); productService.buy(product, purchaseQuantity); } catch (InsufficientProductsException e) { System.out.println("InsufficientProductsException has been thrown"); verify(productDao, times(0)).orderProduct(product, purchaseQuantity); System.out.println("Verified orderProduct(product, " + purchaseQuantity + ") is not called"); throw e; } }