一時フィールドを含むクラスがあります。しかし、クラスの他の部分はシリアライズ可能です。テストでは、フィールドとクラスをモックし、モック化されたクラス オブジェクトを以下のようなディープ コピー関数で使用します。
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を使用しています。