5

私のアプリケーションはdbに接続し、ここからカテゴリのツリーを取得します。デバッグレジームでは、この大きなツリーオブジェクトを見ることができ、テストスタブで使用するためにこのオブジェクトをディスクのどこかに保存する機能を考えました。このような:

mockedDao = mock(MyDao.class);
when(mockedDao.getCategoryTree()).thenReturn(mySavedObject);

-が十分に大きいと仮定するとmySavedObject、手動で生成したり、特別な生成コードを記述したりしたくありません。thenReturnデバッグセッション中にシリアル化してどこかに保存し、逆シリアル化してテストに渡すことができるようにしたいだけです。そうするための標準的な方法はありますか?そうでない場合は、そのようなアプローチを実装する方が良いでしょうか?

4

4 に答える 4

2

あなたのアイデアが大好きです、それは素晴らしいです!

箱から出してその機能を提供するライブラリを私は知りません。ObjectOutoutStreamオブジェクトがすべて実装されている場合は、およびObjectInputStream(つまり、標準のJavaシリアル化)を使用してみることができますSeriablizable。通常、そうではありません。その場合、XStreamまたはその友人の1人を使用する方が運が良いかもしれません。

于 2009-11-27T00:56:36.747 に答える
1

通常、このようなシナリオでは、DB 全体をモックし、コードを再利用 (および暗黙的にテスト) して、DB からカテゴリをロードします。

具体的には、単体テストはメモリ内データベース ( hsqldb ) に対して実行されます。これは、テスト データをインポートすることによって、各テスト実行の前に初期化されます。

于 2009-11-27T01:20:56.997 に答える
0

Dynamic Managed Beansをご覧ください。これは、実行中のJavaアプリケーションの値を変更する方法を提供します。たぶん、ツリーを保持するMBeanを定義し、ツリーを読み取り、どこかに保存して、後で再度注入する方法があります。

于 2009-11-26T13:51:59.927 に答える
0

私はこの同じ問題に遭遇し、可能な解決策を検討しました。数か月前、大きなバイナリ オブジェクトを 16 進数でエンコードされた文字列として出力するカスタム コードを書きました。私の toJava() メソッドは、必要なオブジェクトのフィールド定義のソース コードである String を返します。これを実装するのは難しくありませんでした。ログ ステートメントを挿入して結果をログ ファイルに出力し、ログ ファイルからカット アンド ペーストしてテスト クラスに貼り付けました。新しい単体テストはそのファイルを参照するため、別の方法では構築が非常に難しいオブジェクトの操作を掘り下げることができます。

これは非常に便利でしたが、すぐにコンパイル単位のバイトコードのサイズの制限に達しました。

于 2020-12-21T13:10:58.353 に答える