Mock Object and Interface
        Posted  
        
            by tunl
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by tunl
        
        
        
        Published on 2010-05-11T08:35:51Z
        Indexed on 
            2010/05/11
            8:44 UTC
        
        
        Read the original article
        Hit count: 329
        
I'm a newbie in Unit Test with Mock Object. I use EasyMock. I try to understand this example:
import java.io.IOException;
public interface ExchangeRate {
    double getRate(String inputCurrency, String outputCurrency) throws IOException;
}
import java.io.IOException;
public class Currency {
    private String units;
    private long amount;
    private int cents;
    public Currency(double amount, String code) {
        this.units = code;
        setAmount(amount);
    }
    private void setAmount(double amount) {
        this.amount = new Double(amount).longValue();
        this.cents = (int) ((amount * 100.0) % 100);
    }
    public Currency toEuros(ExchangeRate converter) {
        if ("EUR".equals(units)) return this;
        else {
            double input = amount + cents/100.0;
            double rate;
            try {
                rate = converter.getRate(units, "EUR");
                double output = input * rate;
                return new Currency(output, "EUR");
            } catch (IOException ex) {
                return null;
            }
        }
    }
    public boolean equals(Object o) {
        if (o instanceof Currency) {
            Currency other = (Currency) o;
            return this.units.equals(other.units)
                    && this.amount == other.amount
                    && this.cents == other.cents;
        }
        return false;
    }
    public String toString() {
        return amount + "." + Math.abs(cents) + " " + units;
    }
}
import junit.framework.TestCase;
import org.easymock.EasyMock;
import java.io.IOException;
public class CurrencyTest extends TestCase {
    public void testToEuros() throws IOException {
        Currency testObject = new Currency(2.50, "USD");
        Currency expected = new Currency(3.75, "EUR");
        ExchangeRate mock = EasyMock.createMock(ExchangeRate.class);
        EasyMock.expect(mock.getRate("USD", "EUR")).andReturn(1.5);
        EasyMock.replay(mock);
        Currency actual = testObject.toEuros(mock);
        assertEquals(expected, actual);
    }
}
So, i wonder how to Currency use ExchangeRate in toEuros(..) method.                        
rate = converter.getRate(units, "EUR");
The behavior of getRate(..) method is not specified because ExchangeRate is an interface. 
© Stack Overflow or respective owner