Use Serialization framework to change all set/add input/output methods to serialize, deserialize to do defensive copying. This will prevent users from modifying input/expected output objects by accident. The one problem is dealing with custom serializations that require a setting in the conf. Users would have to make sure to set the property in the conf before adding any input/output, this may break some existing test programs. I guess we can just throw a meaningful exception in the add method when we cannot serialize, deserialize.