1. ホーム
  2. java

[解決済み] クラスがSerializableを正しく実装していることをJavaでテストするには(単にSerializableのインスタンスであるだけではなく)?

2023-06-24 08:29:10

質問

私はSerializableであるためにクラスを実装しています(したがって、それはRMIで使用するための値オブジェクトです)。しかし、私はそれをテストする必要があります。これを簡単に行う方法はありますか?

明確化 : 私はクラスを実装しているので、クラス定義にSerializableをくっつけるのは些細なことです。私はそれが動作するかどうかを確認するために手動でシリアライズ/デシリアライズする必要があります。

私はこれを見つけた C#の質問 は、Javaのための同様の回答がありますか?

どのように解決するには?

簡単な方法は、そのオブジェクトが java.io.Serializable または java.io.Externalizable などと書いても、そのオブジェクトが本当にシリアライズ可能であることを証明することはできません。

確かめる唯一の方法は、実際にそれを試してみることです。最も簡単なテストは以下のようなものです。

new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(myObject);

を実行し、例外が投げられないことを確認します。

Apache Commons Lang は、より簡潔なバージョンを提供しています。

SerializationUtils.serialize(myObject);

で、再度、例外を確認します。

さらに厳密には、デシリアライズして元と同じものに戻るかどうかをチェックすることもできます。

Serializable original = ...
Serializable copy = SerializationUtils.clone(original);
assertEquals(original, copy);

といった具合になります。