晚上好,第一次面对模拟对象,我试着测试我的应用程序,但什么也没发生。我应该测试自动取款机的工作。我有两个接口没有实现(帐户和卡)和一个类别。自动取款机(有空的方法)。我的任务是在班里实现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());
}
}发布于 2013-11-13 00:55:30
我让您的代码正常工作,但做了以下更新:
@Test public void setBalance (double x))中删除该参数。@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.
}测试结果:

https://stackoverflow.com/questions/19942548
复制相似问题