オブジェクトをデバッグで保存し、テストでスタブとして使用する
-
05-07-2019 - |
質問
私のアプリケーションはdbに接続し、ここからカテゴリのツリーを取得します。デバッグ体制では、この大きなツリーオブジェクトを見ることができ、テストスタブで使用するためにディスク上のどこかにこのオブジェクトを保存する機能について考えました。このように:
mockedDao = mock(MyDao.class);
when(mockedDao.getCategoryTree()).thenReturn(mySavedObject);
mySavedObject
を想定-十分に大きいため、手動で生成したり、特別な生成コードを記述したりしたくありません。デバッグセッション中にどこかにシリアライズして保存し、デシリアライズしてテストで thenReturn
に渡すことができるようにしたいだけです。
そうするための標準的な方法はありますか?そうでない場合、そのようなアプローチを実装する方が良いですか?
解決
私はあなたのアイデアをします、それは素晴らしい!
すぐにその機能を提供するライブラリを知りません。オブジェクトがすべて Seriablizable
を実装している場合は、 ObjectOutoutStream
および ObjectInputStream
(つまり、標準のJavaシリアル化)を使用してみてください。通常、そうではありません。その場合、 XStream またはその友人のいずれかを使用すると、さらに運が上がるかもしれません。
他のヒント
通常は、DB全体をモックします。このようなシナリオでは、DBからカテゴリをロードするコードを再利用(および暗黙的にテスト)します。
具体的には、ユニットテストはインメモリデータベースに対して実行されます( hsqldb ) 、テストデータをインポートして、各テストの実行前に初期化します。
ダイナミックマネージドBeans をご覧ください-これは、実行中の値を変更する方法を提供しますJavaアプリケーション。たぶん、あなたのツリーを保持するMBeanを定義し、ツリーを読んで、どこかにそれを保存して、後で再び注入する方法があるでしょう。