すべてのテストを孤立して実行するには、テストメソッドが呼び出されるたびにMongoDbコレクションを削除して再作成し、POJOアノテーションを読み込みたいと思います。問題は、MongoTemplateクラスがインスタンス化されたときにのみインデックスが作成されるように見えるということです。すべてのインデックスを持つコレクションを再作成するにはどうすればよいですか?
これが「通常」のアプリケーションに最適ですが、統合テスト中に、私は(実際のアプリケーションのために多分遅すぎる...)このようなテストを持っているしたいと思います:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {
ApplicationConfig.class,
MongoConfiguration.class,
TestMongoConfiguration.class})
@ActiveProfiles("test")
public class BookServiceIntegrationTests {
private @Autowired TestHelper testHelper;
@Before
public void startup() {
testHelper.init(Book.class);
}
@After
public void cleanup() {
testHelper.drop(Book.class);
}
//test methods...
}
そして、これがあります私の非常に簡単POJOクラス:私はクラスMongoPersistentEntityIndexCreatorは、POJOの注釈を読み、colletionのインデックスを確保していることがわかりましたMongoDBのための春のデータ(1.0.1.RELEASE)のソースをチェック
@Document(collection = "books")
public class Book {
@Id
private ObjectId id;
@Indexed(unique = true)
private String isbn;
private String author;
private String title;
private String genre;
private List<String> tags;
private List<Comment> comments;
}
。このクラスは、MongoTemplateコンストラクタ内でのみ呼び出されます。
私はテストでロールバックされたトランザクションのようなものをシミュレートするより良い方法があると思いますか?
おかげで、私はあなたが注釈を読みたい見ることができるので カルロ
ありがとうございました。これは、テストスイートを実行する前にテストデータを読み込むという2番目のステップになります。これらのコマンドを私のgradleスクリプトに追加しようとします。 –