[解決済み] クラスが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);
といった具合になります。
関連
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
[解決済み】JavaでMap値をインクリメントする最も効率的な方法
-
[解決済み] JsonMappingException: No suitable constructor found for type [simple type, class ]: can't instantiate from JSON object.
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] クラスをJSONシリアライザブルにする方法
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み] Mapを実装し、挿入順序を保持するJavaクラス?
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
-
[解決済み] C++でクラスをシリアライズ、デシリアライズすることは可能ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
executeQuery()でデータ操作文が発行できない。解決方法
-
Jsoup-Crawlingの動作
-
Uncaught ReferenceError: は定義されていません。
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
java.sql.SQLException: 結果セットの開始前
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
Junitのユニットテストエラー
-
Java Runtime Environmentを継続するためのメモリが不足しています。