Serialization Hazelcast和x27系列化单元测试;s数据可序列化的写数据和读数据

Serialization Hazelcast和x27系列化单元测试;s数据可序列化的写数据和读数据,serialization,deserialization,hazelcast,Serialization,Deserialization,Hazelcast,鉴于我有审计课程: public class Audit implements DataSerializable { private String createdBy = "me"; private LocalDateTime createdTimestamp = LocalDateTime.now(); private String modifiedBy; private LocalDateTime modifiedTimestamp; @Over

鉴于我有
审计
课程:

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());
    }

}
我想编写单元测试来测试序列化和反序列化

ObjectDataOutput
ObjectDataInput
的实现要么是包私有的,要么需要提供来自Hazelcast API的组件


如何创建这样的测试?

毕竟,创建这样的测试是可能的。 我缺少可以创建序列化服务的
DefaultSerializationServiceBuilder

用Groovy编写的整个测试是:

import static org.apache.commons.lang3.builder.EqualsBuilder.reflectionEquals

import java.time.LocalDateTime

import com.hazelcast.internal.serialization.impl.DefaultSerializationServiceBuilder
import com.hazelcast.internal.serialization.impl.ObjectDataInputStream
import com.hazelcast.internal.serialization.impl.ObjectDataOutputStream
import com.hazelcast.spi.serialization.SerializationService
import org.junit.Test

class AuditTest {

    @Test
    void "serialize and deserialize Audit"() {
        def toSerialize = new Audit(createdBy: "me",
                createdTimestamp: LocalDateTime.now(),
                modifiedBy: "you",
                modifiedTimestamp: LocalDateTime.now(),
        )
        SerializationService serializationService = new DefaultSerializationServiceBuilder().build()

        def outputStream = new ByteArrayOutputStream()
        def dataOutput = new ObjectDataOutputStream(outputStream, serializationService)
        toSerialize.writeData(dataOutput)

        def inputStream = new ByteArrayInputStream(outputStream.toByteArray())
        def dataInput = new ObjectDataInputStream(inputStream, serializationService)

        def toDeserialize = new Audited()
        toDeserialize.readData(dataInput)

        assert reflectionEquals(toDeserialize, toSerialize)
    }
}

您可以使用
SerializationService
克隆对象,并测试是否相等

SerializationService serializationService = new DefaultSerializationServiceBuilder().build();

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

您可以序列化和反序列化对象,并检查是否相等
Data Data=serializationService.toData(审计)
audit clone=serializationService.toObject(数据)
@ali谢谢你的提示。使用
SerializationService
API,测试可能会更短。