Как я могу воссоздать коллекцию со всеми индексами? - PullRequest
0 голосов
/ 17 марта 2012

Чтобы выполнить все мои тесты изолированно, я хотел бы удалять и воссоздавать коллекцию 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;
}

Проверка источников данных Spring для MongoDB (1.0.1.RELEASE) Я видел, что класс MongoPersistentEntityIndexCreator читает аннотации POJO и обеспечивает индексы для коллекции.Этот класс вызывается только внутри конструктора MongoTemplate.

Как вы думаете, я смогу найти лучший способ имитировать что-то вроде отката транзакции в моих тестах?

Спасибо, Карло

1 Ответ

0 голосов
/ 17 марта 2012

Отредактируйте, потому что я вижу, что вы хотите прочитать аннотации, поэтому последующее может быть тем, что вы уже попробовали. Если вы можете жить со сценариями коллекции вне Java, вы можете попробовать этот подход:

Используйте mongodump и mongorestore, используя exec системы времени исполнения из Java.

Во-первых, сделайте снимок вашей тестовой коллекции:

/usr/bin/mongodump -d yourDB -c books

Затем в настройке вашего теста JUnit восстановите коллекцию, сначала отбросив старую с опцией --drop.

/usr/bin/mongorestore --drop -d yourDB -c books dump/yourDB 

Это должно восстановить индексы одновременно.

...