2012-03-17 4 views
0

Чтобы выполнить все мои тесты изолированно, я хотел бы сбросить и воссоздать коллекцию 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) Я видел, что класс MongoPersistentEntityIndexCreator читает POJO аннотации и обеспечение индексов для полуботинки. Этот класс вызывается только внутри конструктора MongoTemplate.

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

Спасибо, Carlo

ответ

0

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

Используйте mongodump и mongorestore с помощью исполняемого файла системы на Java.

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

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

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

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

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

+0

Спасибо. Это будет второй шаг: загрузка тестовых данных до выполнения набора тестов. Я попытаюсь добавить эти команды в свой сценарий градиента. –

Смежные вопросы