Search code examples
serializationdeserializationhazelcast

Serialization unit test for Hazelcast's DataSerializable writeData and readData


Given I have Audit class:

public class Audit implements DataSerializable {

    private String createdBy = "me";
    private LocalDateTime createdTimestamp = LocalDateTime.now();

    private String modifiedBy;
    private LocalDateTime modifiedTimestamp;

    @Override
    public void writeData(ObjectDataOutput out) throws IOException {
        out.writeUTF(getCreatedBy());
        out.writeObject(getCreatedTimestamp());

        out.writeUTF(getModifiedBy());
        out.writeObject(getModifiedTimestamp());
    }

    @Override
    public void readData(ObjectDataInput in) throws IOException {
        setCreatedBy(in.readUTF());
        setCreatedTimestamp(in.readObject());

        setModifiedBy(in.readUTF());
        setModifiedTimestamp(in.readObject());
    }

}

I'd like to write unit test which tests serialization and deserialization.

Implementations of ObjectDataOutput and ObjectDataInput are either package private or they require to provide components from Hazelcast API.

How can I create such test?


Solution

  • You can clone the object using SerializationService and test equality

    SerializationService serializationService = new DefaultSerializationServiceBuilder().build();
    
    Audit expected = new Audit(...);
    Audit actual = serializationService.toObject(serializationService.toData(expected);
    assertEquals(expected, actual);