gpt4 book ai didi

java - 如何使用 mockito 单元测试自定义可写对象

转载 作者:行者123 更新时间:2023-12-04 05:00:18 26 4
gpt4 key购买 nike

如果我有一个实现 Writable 的自定义对象类,那么测试序列化/反序列化是否与使用 mockito 的单元测试一起正常工作的最佳方法是什么?我正在考虑创建模拟映射器/ reducer ,但这似乎太不必要了。

示例代码:

public class CustomObj implements Writable {
private String value;

public CustomObj(String v) {
value = v;
}

@Override
public void write(DataOutput out) throws IOException {
out.writeChars(value);
}

public void readFields(DataInput in) throws IOException {
value = in.readLine();
}

最佳答案

为什么要为此使用模拟框架?

往返测试将是最简单和最快的 - 所以只需序列化然后反序列化并比较两个实例。不要使用您的 equals() 方法进行比较,即使它经过了很好的测试。

您还需要测试边缘,例如以确保在反序列化时重新创建/重新添加 transient 字段,您可以使用 readResolve()

可以在 IBM DeveloperWorks 上找到一些有用的提示。

这是一个示例往返测试:

public class WritableTest {


public class CustomObj implements Writable {
private String value;

public CustomObj(String v) {
value = v;
}

@Override
public void write(DataOutput out) throws IOException {
out.writeUTF(value);
}

@Override
public void readFields(DataInput in) throws IOException {
value = in.readUTF();
}
}


@Test
public void roundTripSerialization() throws Exception
{
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
DataOutput out = new DataOutputStream(byteOutput);

CustomObj original = new CustomObj("originalValue");

original.write(out);


CustomObj deserialized = new CustomObj("you should really use add a zero arg constructor as well");

DataInput in = new DataInputStream(new ByteArrayInputStream(byteOutput.toByteArray()));

deserialized.readFields(in);


Assert.assertEquals(original.value, deserialized.value);
}
}

关于java - 如何使用 mockito 单元测试自定义可写对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16224236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com