すべてのテストを個別に実行するために、テストメソッドが呼び出されるたびに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クラスです。
@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;
}
MongoDB(1.0.1.RELEASE)のSpring Dataのソースを確認するクラスMongoPersistentEntityIndexCreatorがPOJOアノテーションを読み取り、コレクションのインデックスを確認していることを確認しました。このクラスは、MongoTemplateコンストラクター内でのみ呼び出されます。
テストでロールバックされたトランザクションのようなものをシミュレートするためのより良い方法を見つけることができると思いますか?
ありがとう、カルロ