1

こんばんは、初めてモック オブジェクトに直面したとき、アプリケーションをテストしようとしましたが、何も起こりませんでした。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());
}


}
4

1 に答える 1

0

私はあなたのコードを動作させましたが、次の更新を行いました:

  • パラメータをテスト メソッドから削除しました ( @Test public void setBalance (double x))。
  • これらはテストと優れた実践に使用されるため、ATM クラスにゲッター/セッターを追加しました。
  • Junit ランナー アノテーションを追加しました@RunWith(PowerMockRunner.class)
  • その他の更新は、次の作業コードに示されています。

ATMtest.java:

package myatm;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
public class ATMtest {

    // Class Under Test
    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);
        when(acc.getBalance()).thenReturn((double) 1);
        atm = new ATM(1500);
        atm.setAcc(acc);
    }

    @Test
    public void testCheckBalance() {

        /* Test */
        double result = atm.checkBalance();

        /* Asserts */
        Assert.assertEquals((double) 1, result, .001);
    }

}

MyATM.java :

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);
    }
}

ATM.java :

package myatm;

public class ATM {
    public double money;

    ATM(double moneyInATM) { // we can set up the number of money in ATM
        money = moneyInATM;

    }

    // 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();
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public Account getAcc() {
        return acc;
    }

    public void setAcc(Account acc) {
        this.acc = acc;
    }

    // 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 (this.checkBalance() > acc.getBalance()) {
            sum = (acc.getBalance() - sum);
        } else if (this.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;
    }
}

Account.java :

package myatm;

public interface Account {
    public double getBalance(); // returns current balance

    public double withdrow(double amount); // returns the sum which was taken.
}

試験結果:

ここに画像の説明を入力

于 2013-11-13T00:55:30.153 に答える