1

自動テストを追加する既存のGrails/MongoDBアプリケーションがあります。これらのテストを、Mongoコレクション内の特定のデータセットに対して実行する必要があります。テストでデータをマングルできるようにし(運が良ければ予測可能な結果で)、データベースをすばやく削除して再作成/再ロードできるようにして、テストを再度実行できるようにします。

このシードテストデータは本番システムの実際のデータに基づいているので、Mongoシェルなどのクエリから取得できるJSON/BSON形式のデータをロードできるようにしたいと思います。似ている。

基本的に、次のような100行のコードを記述する必要はありません。newRecord(name:'John Doe'、age: '25'、favoriteColor:'blue')。save()

それぞれ30個のプロパティを除いて、制約が満たされ、データが現実的であることを確認します。そのため、本番データを使用したいと思います。

また、実際のデータをロードおよびリロードするためにmongorestoreを実行するspowning execに頼る必要はありません。これは、テスターのマシンで追加のソフトウェアを実行する必要があるためです。

もっと良い方法はありますか?おそらく、生のJSONを何らかの形でアンマーシャリングして、Grails MongoDB GORMまたはGMongoで実行したり、JavaMongoDBドライバーを直接呼び出したりできるようにしますか?

4

2 に答える 2

0

com.mongodb.util.JSONクラスを使用して、JSONデータを直接DBObjectに変換できます。Javaドライバーを使用してそれを行う方法を示すこの例を見てください。
このMongoDBブログ投稿は、GORMとGroovyドライバーを使用してそれを行う方法を示しています。

于 2013-03-21T18:57:17.200 に答える
0

テストデータをトランスポータブルファイルに保存する必要がありますか、それとも、テストデータが存在する可能性のあるmongodbインスタンスに常にアクセスできますか?たとえば、テストmongodbサーバーがあり、テストが実行されるたびにサーバーにアクセスできることを信頼できるとします。

その場合、最も簡単な解決策は、各テスト実行の前にクローン化するコレクションにテストデータを保持することです。その後、テストは、実際のデータを失うことなく、複製されたコレクションを自由に壊すことができます。

テストデータをファイルに保存する必要がある場合(たとえば、コードリポジトリに保存する場合など)、BSONとのシリアル化/逆シリアル化が容易な形式を見つける必要があります。特に@drorbが上で述べたように、mongodbにはすでにそれを行うためのツールがあるため、JSONは当然の選択のように思われます。

次に、既存のコレクションのコンテンツをJSONファイルにダンプするスクリプトと、JSONファイルのセットを読み込んでコレクションに保存するスクリプトを1つ作成するだけで済みます。おそらく、それぞれ数行以内です。

すべてのテストデータを含む大きなファイルではなく、各オブジェクトを個別のJSONファイルに保存することをお勧めします。私がJSONを気に入っているのと同じように、JSONはストリーミングには向いていません。また、mongodbにダンプを開始する前に、コレクション全体をメモリに保存する必要があります。テストデータが十分に大きい場合、メモリの問題が発生し始める可能性があります。

于 2013-03-21T22:38:38.923 に答える