1

晚上好,第一次面对模拟对象,我尝试测试我的应用程序,但没有任何反应。我应该测试ATM的工作。我有 2 个未实现的接口(帐户和卡)和一个类。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);        
    }
    }

这是我尝试为一种方法编写的测试,但它不起作用。请试着让我知道我做错了什么。

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 类添加了 getter/setter,因为它们用于测试和良好实践。
  • 添加了 Junit runner 注释@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;
    }
}

帐户.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 回答