### Question:
FxRateId implements MarketDataId<FxRate>, ImmutableBean, Serializable { public static FxRateId of(CurrencyPair currencyPair) { return new FxRateId(currencyPair, ObservableSource.NONE); } @ImmutableConstructor private  FxRateId(CurrencyPair currencyPair, ObservableSource observableSource); static FxRateId of(CurrencyPair currencyPair); static FxRateId of(Currency base, Currency counter); static FxRateId of(CurrencyPair currencyPair, ObservableSource observableSource); static FxRateId of(Currency base, Currency counter, ObservableSource observableSource); @Override Class<FxRate> getMarketDataType(); @Override String toString(); static TypedMetaBean<FxRateId> meta(); @Override TypedMetaBean<FxRateId> metaBean(); CurrencyPair getPair(); ObservableSource getObservableSource(); @Override boolean equals(Object obj); @Override int hashCode();  }### Answer:
@Test public void coverage() { FxRateId test = FxRateId.of(GBP, USD); coverImmutableBean(test); FxRateId test2 = FxRateId.of(EUR, CHF, OBS_SOURCE); coverBeanEquals(test, test2); }
@Test public void coverage_builder() { MetaBean meta = MetaBean.of(FxRateId.class); Bean test1 = meta.builder() .set("pair", CurrencyPair.parse("EUR/GBP")) .set("observableSource", OBS_SOURCE) .build(); Bean test2 = meta.builder() .set("pair", CurrencyPair.parse("EUR/GBP")) .set("observableSource", OBS_SOURCE) .build(); coverBeanEquals(test1, test2); }
@Test public void test_serialization() { FxRateId test = FxRateId.of(GBP, USD); assertSerialization(test); }