Юнит-тест сериализации для DataSerializable dataDerial и readData Hazelcast - PullRequest
1 голос
/ 24 января 2020

Учитывая, что у меня есть Audit класс:

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.

Как создать такой тест?

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Вы можете клонировать объект, используя SerializationService и проверить равенство

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

Audit expected = new Audit(...);
Audit actual = serializationService.toObject(serializationService.toData(expected);
assertEquals(expected, actual);
0 голосов
/ 24 января 2020

Ведь такой тест можно создать. Мне не хватало DefaultSerializationServiceBuilder, которое может создать SerializationService

Весь тест, написанный на 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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...