@Test public void testGetCash() throws NotEnoughMoneyInAccountException, NotEnoughMoneyInATMException, NoCardInsertedException { System.out.println("getCashNotZeroBalance"); double atmMoney = 1000.0; ATM atmTest = new ATM(atmMoney); Card mockCard = mock(Card.class); Account mockAccount = mock(Account.class); atmTest.insertCard(mockCard); // ver.2 double balance = 600.0; double amount = 100.0; int pinCode = 7777; when(mockCard.getAccount()).thenReturn(mockAccount); when(mockCard.checkPin(pinCode)).thenReturn(true); when(mockCard.isBlocked()).thenReturn(false); when(mockAccount.getBalance()).thenReturn(balance); when(mockAccount.withdrow(amount)).thenReturn(amount); atmTest.validateCard(mockCard, pinCode); atmTest.getCash(amount); when(mockAccount.getBalance()).thenReturn(balance - amount); assertEquals(atmTest.getMoneyInATM(), atmMoney - amount, 0.0); assertEquals(atmTest.checkBalance(), balance - amount, 0.0); InOrder inOrder = inOrder(mockCard, mockAccount); inOrder.verify(mockCard).isBlocked(); inOrder.verify(mockCard).checkPin(pinCode); inOrder.verify(mockCard, atLeastOnce()).getAccount(); verify(mockAccount).withdrow(amount); inOrder.verify(mockAccount).getBalance(); }
@Test public void testValidateCardWithInvalidPin() throws NoCardInsertedException { System.out.println("validateCardWithInvalidPin"); ATM atmTest = new ATM(1000.0); Card mockCard = mock(Card.class); int pinCode = 7777; when(mockCard.isBlocked()).thenReturn(false); when(mockCard.checkPin(pinCode)).thenReturn(false); assertFalse(atmTest.validateCard(mockCard, pinCode)); }
@Test public void testCheckBalanceVerify() throws NoCardInsertedException { System.out.println("checkBalanceVerify"); ATM atmTest = new ATM(1000); Card mockCard = mock(Card.class); Account mockAccount = mock(Account.class); when(mockCard.getAccount()).thenReturn(mockAccount); atmTest.insertCard(mockCard); atmTest.checkBalance(); verify(mockCard, times(1)).isBlocked(); }
@Test(expected = IllegalArgumentException.class) public void testGetCashLessThanZero() throws NotEnoughMoneyInATMException, NotEnoughMoneyInAccountException, NoCardInsertedException { System.out.println("getCashLessThanZero"); double amount = -100.0; ATM atmTest = new ATM(1000.0); Card mockCard = mock(Card.class); atmTest.insertCard(mockCard); Account mockAccount = mock(Account.class); when(mockCard.getAccount()).thenReturn(mockAccount); atmTest.getCash(amount); }
@Test public void testValidateValidCard() throws NoCardInsertedException { System.out.println("validateValidCard"); ATM atmTest = new ATM(1000.0); Card mockCard = mock(Card.class); int pinCode = 7777; when(mockCard.isBlocked()).thenReturn(false); when(mockCard.checkPin(pinCode)).thenReturn(true); boolean expResult = true; boolean result = atmTest.validateCard(mockCard, pinCode); assertEquals(expResult, result); InOrder inOrder = inOrder(mockCard); inOrder.verify(mockCard).isBlocked(); inOrder.verify(mockCard).checkPin(pinCode); }
@Test public void testCheckBalance() throws NoCardInsertedException { System.out.println("checkBalance"); ATM atmTest = new ATM(1000.0); Card mockCard = mock(Card.class); Account mockAccount = mock(Account.class); atmTest.insertCard(mockCard); when(mockCard.getAccount()).thenReturn(mockAccount); when(mockAccount.getBalance()).thenReturn(0.0); double expResult = 0.0; double result = atmTest.checkBalance(); assertEquals(expResult, result, 0.0); InOrder inOrder = inOrder(mockCard, mockAccount); inOrder.verify(mockCard).getAccount(); inOrder.verify(mockAccount).getBalance(); }
@Test(expected = NotEnoughMoneyInATMException.class) public void testGetCashNotEnoughMoneyInATM() throws NoCardInsertedException, NotEnoughMoneyInAccountException, NotEnoughMoneyInATMException { System.out.println("getCashNotEnoughMoneyInATM"); ATM atmTest = new ATM(1000.0); Card mockCard = mock(Card.class); Account mockAccount = mock(Account.class); double amount = 1100.0; int pinCode = 7777; atmTest.insertCard(mockCard); // ver.2 when(mockCard.getAccount()).thenReturn(mockAccount); when(mockCard.checkPin(pinCode)).thenReturn(true); atmTest.validateCard(mockCard, pinCode); atmTest.getCash(amount); InOrder inOrder = inOrder(mockCard, mockAccount); inOrder.verify(mockCard).getAccount(); inOrder.verify(mockAccount).getBalance(); }