### Question:
BondFutureOption implements SecuritizedProduct, Resolvable<ResolvedBondFutureOption>, ImmutableBean, Serializable { public static BondFutureOption.Builder builder() { return new BondFutureOption.Builder(); } BondFutureOption(
      SecurityId securityId,
      PutCall putCall,
      double strikePrice,
      LocalDate expiryDate,
      LocalTime expiryTime,
      ZoneId expiryZone,
      FutureOptionPremiumStyle premiumStyle,
      Rounding rounding,
      BondFuture underlyingFuture); @Override Currency getCurrency(); ZonedDateTime getExpiry(); @Override ResolvedBondFutureOption resolve(ReferenceData refData); static BondFutureOption.Meta meta(); static BondFutureOption.Builder builder(); @Override BondFutureOption.Meta metaBean(); @Override SecurityId getSecurityId(); PutCall getPutCall(); double getStrikePrice(); LocalDate getExpiryDate(); LocalTime getExpiryTime(); ZoneId getExpiryZone(); FutureOptionPremiumStyle getPremiumStyle(); Rounding getRounding(); BondFuture getUnderlyingFuture(); Builder toBuilder(); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void test_builder_expiryNotAfterTradeDate() { assertThatIllegalArgumentException() .isThrownBy(() -> BondFutureOption.builder() .putCall(CALL) .expiryDate(FUTURE.getLastTradeDate()) .expiryTime(EXPIRY_TIME) .expiryZone(EXPIRY_ZONE) .strikePrice(STRIKE_PRICE) .underlyingFuture(FUTURE) .build()); }