こんばんは、初めてモック オブジェクトに直面したとき、アプリケーションをテストしようとしましたが、何も起こりませんでした。ATM の動作をテストする必要があります。実装されていない 2 つのインターフェイス (アカウントとカード) と 1 つのクラスがあります。ATM (メソッドが空の場合)。私の仕事は、クラス ATM にメソッドを実装することでした。しかし、メソッドを変更しないでください。
だからここに私のコードがありますが、これはテストできません。
1)インターフェースカード:
package myatm;
public interface Card {
public boolean isBlocked(); // checks whther card is blocked or not
public Account getAccount(); // returns the balance connected with this card
public boolean checkPin(int pinCode); // checks the property of password
}
2) インターフェースアカウント:
package myatm;
public interface Account {
public double getBalance(); // returns current balance
public double withdrow(double amount); // returns the sum which was taken.
}
3) クラス ATM :
package myatm;
public class ATM {
public double money;
ATM(double moneyInATM){ //we can set up the number of money in ATM
money=moneyInATM;
}
public void setATM (ATM atm){
this.atm =atm;
}
public double getMoneyInATM() { //
return atm.checkBalance();
}
// checks pin code and card status(blocked or not)
// if blocked should send exception
// if pin is not correct should send exception too
public boolean validateCard(Card card, int pinCode){
boolean ret = false;
if ((card.checkPin(pinCode)==false) && (card.isBlocked()==false)){
ret=false;
}
else {
if((card.checkPin(pinCode)==true) && (card.isBlocked()==true))
ret = true;
}
return ret; }
Account acc = null;
//returns the total ammount of money
public double checkBalance(){
return acc.getBalance();
}
ATM atm = new ATM(10500);
// method which is taking money from the account.
//Should check if sum is less then money in atm
public double getCash(double amount){
double sum=amount;
if(atm.checkBalance()>acc.getBalance()){
sum=(acc.getBalance()-sum);
}
else if(atm.checkBalance()<acc.getBalance()){
throw new IllegalArgumentException("Not enough money in ATM");
}
else if (sum>acc.getBalance()){
throw new UnsupportedOperationException("Not enought money on your account");
}
return sum;
}}
4) クラス MyATM:
package myatm;
public class MyATM {
public static void main(String[] args) {
double moneyInATM = 1000;
ATM atm = new ATM(moneyInATM);
Card card = null;
atm.validateCard(card, 1234);
atm.checkBalance();
atm.getCash(999.99);
}
}
そして、これが私が1つのメソッドに対して書き込もうとした私のテストですが、うまくいきません。私が何を間違えたのか、考えてみてください。
5) Mockito を含むクラス:
package myatm;
import static java.util.jar.Pack200.Packer.TRUE;
import static org.mockito.Mockito.*;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class ATMtest {
ATM atm;
@Before
public void setup(){
Card card =mock(Card.class);
Account acc = mock(Account.class);
when(card.isBlocked()).thenReturn(Boolean.FALSE);
when(card.checkPin(1234)).thenReturn(Boolean.TRUE);
atm.setATM(atm);
atm = new ATM(1500);
}
@Test
public void setBalance (double x){
Assert.assertEquals(x, atm.checkBalance());
}
}