### Question:
CardHolder implements Cloneable, Serializable, Loggeable { public void setEXP (String exp) throws InvalidCardException { if (exp.length() != 4) throw new InvalidCardException ("Invalid Exp length, must be 4"); this.exp = exp; } CardHolder();  CardHolder(String track2);  CardHolder(String pan, String exp);  CardHolder(ISOMsg m); void parseTrack2(String s); void setTrack1(String track1); String getTrack1(); boolean hasTrack1(); String getNameOnCard(); String getTrack2(); boolean hasTrack2(); void setSecurityCode(String securityCode); String getSecurityCode(); boolean hasSecurityCode(); @SuppressWarnings("unused") String getTrailler(); @SuppressWarnings("unused") void setTrailler(String trailer); String getTrailer(); void setTrailer(String trailer); void setPAN(String pan); String getPAN(); String getBIN(); void setEXP(String exp); String getEXP(); boolean isExpired(); boolean isExpired(Date currentDate); boolean isValidCRC(); static boolean isValidCRC(String p); void dump(PrintStream p, String indent); String getServiceCode(); boolean seemsManualEntry(); @Override int hashCode(); @Override boolean equals(Object obj);  }### Answer:
@Test public void testSetEXP() throws Throwable { CardHolder cardHolder = new CardHolder(); cardHolder.setEXP("9913"); assertEquals("9913", cardHolder.exp, "cardHolder.exp"); }
@Test public void testSetEXPThrowsInvalidCardException() throws Throwable { CardHolder cardHolder = new CardHolder("testCardHolderPan", "4Cha"); assertThrows(InvalidCardException.class, () -> cardHolder.setEXP("5Char")); assertEquals("4Cha", cardHolder.exp, "cardHolder.exp"); }
@Test public void testSetEXPThrowsInvalidCardException1() throws Throwable { CardHolder cardHolder = new CardHolder("testCardHolderPan", "4Cha"); assertThrows(InvalidCardException.class, () -> cardHolder.setEXP("3Ch")); assertEquals("4Cha", cardHolder.exp, "cardHolder.exp"); }
@Test public void testSetEXPThrowsNullPointerException() throws Throwable { CardHolder cardHolder = new CardHolder("testCardHolderPan", "4Cha"); try { cardHolder.setEXP(null); fail("Expected NullPointerException to be thrown"); } catch (NullPointerException ex) { if (isJavaVersionAtMost(JAVA_14)) { assertNull(ex.getMessage(), "ex.getMessage()"); } else { assertEquals("Cannot invoke \"String.length()\" because \"exp\" is null", ex.getMessage(), "ex.getMessage()"); } assertEquals("4Cha", cardHolder.exp, "cardHolder.exp"); } }