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,测试可能会更短。