我有一个包含瞬态字段的类。但是该类的其他部分是可序列化的。 在测试中,我模拟字段和类,并在深层复制函数中使用模拟的类对象,如下所示:
try {
final ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
objectOut = new ObjectOutputStream(bytesOut);
// serialize and pass the object
objectOut.writeObject(original);
objectOut.flush();
final ByteArrayInputStream bytesIn =
new ByteArrayInputStream(bytesOut.toByteArray());
objectIn = new ObjectInputStream(bytesIn);
@SuppressWarnings("unchecked")
final T clone = (T) objectIn.readObject();
// return the new object
return clone;
}
catch () {...}
writeObject(original)方法应该写入所有非瞬态和非静态字段。但我有一个错误,说模拟瞬态字段的java.io.NotSerializableException。我想知道在测试中是否无法识别瞬态场?我使用mockito作为我的框架。
答案 0 :(得分:0)
“我嘲笑田野和课堂”是什么意思?
我刚刚根据这个虚拟课程进行了快速测试:
public class DummyClass implements Serializable {
private static final long serialVersionUID = -4991860764538033995L;
transient private ChildClass child;
...
}
ChildClass
只是一个空(非Serializable
)类。测试看起来像这样:
...
DummyClass dc = new DummyClass();
ChildClass mockChild = mock(ChildClass.class);
dc.setChild(mockChild);
copier.copy(dc);
...并且不会抛出任何NotSerializableException。
你想测试什么?深层复印机或传递给它的班级?