### Question:
Argument extends Parameter<T> { @Override public String toString() { return super.toString(this.getClass().getSimpleName(), "optional=" + optional); } Argument(String key, T value);  Argument(String key, T value, boolean optional); boolean isOptional(); void setOptional(boolean optional); @Override String toString();  }### Answer:
@Test public void argumentStringTest() { Argument argument = new Argument(null, null); argument.setKey("test"); argument.setValue("test"); assertEquals("test", argument.getKey()); assertEquals("test", argument.getValue()); assertEquals("Argument{key='test', value=test, optional=false}", argument.toString()); }
@Test public void argumentIntTest() { Argument argument = new Argument(null, null); argument.setKey("test"); argument.setValue(1); assertEquals("test", argument.getKey()); assertEquals(1, argument.getValue()); assertEquals("Argument{key='test', value=1, optional=false}", argument.toString()); }
@Test public void argumentEnumTest() { Argument argument = new Argument(null, null); argument.setKey("test"); argument.setValue(STATUS.active); assertEquals("test", argument.getKey()); assertEquals(STATUS.active, argument.getValue()); assertEquals("Argument{key='test', value=active, optional=false}", argument.toString()); }