### Question:
ExchangeBasedCurrencyValue extends CurrencyValue { static public CurrencyValue fromValue(CurrencyValue currencyValue, String targetCurrency, ExchangeRateProvider exchangeRateManager) { if (currencyValue instanceof ExchangeBasedCurrencyValue) { return fromValue((ExchangeBasedCurrencyValue) currencyValue, targetCurrency, exchangeRateManager); } else if (currencyValue instanceof ExactCurrencyValue) { return fromValue((ExactCurrencyValue) currencyValue, targetCurrency, exchangeRateManager); } else { throw new RuntimeException("Unable to convert from currency value " + currencyValue.getClass().toString()); } } protected  ExchangeBasedCurrencyValue(String currency, ExactCurrencyValue basedOnExactValue); static CurrencyValue fromValue(CurrencyValue currencyValue, String targetCurrency, ExchangeRateProvider exchangeRateManager); static CurrencyValue fromValue(ExchangeBasedCurrencyValue currencyValue, String targetCurrency, ExchangeRateProvider exchangeRateManager); static CurrencyValue fromValue(ExactCurrencyValue currencyValue, String targetCurrency, ExchangeRateProvider exchangeRateManager); static CurrencyValue from(BigDecimal value, String currency); static CurrencyValue convertFromValue(ExchangeBasedCurrencyValue value, String targetCurrency, ExchangeRateProvider exchangeRateManager); static CurrencyValue fromExactValue(ExactCurrencyValue exactValue, String targetCurrency, ExchangeRateProvider exchangeRateManager); @Override String getCurrency(); @Override boolean hasExactValue(); @Override ExactCurrencyValue getExactValue();  }### Answer:
@Test public void testFromValue() throws Exception { }