Как позволить Spring Data Mongodb выполнять createIndexes перед каждым тестовым методом? - PullRequest
3 голосов
/ 17 марта 2019

Поле MongoDB Entity MyCardDO, явно установите его уникальным

@Indexed(unique=true)
private String uid;

, и есть MyCardService для грубой MyCardDO, и есть MyCardServiceTest для проверки MyCardService, естьadd_repeat_uid_record_failed внутренний MyCardServiceTest для тестирования идентификатора не может быть продублирован,

    MyCardDO myCardDO1 = new MyCardDO();
    myCardDO1.setUid("1");
    myCardService.add(myCardDO1);

    try {
        MyCardDO myCardDO2 = new MyCardDO();
        myCardDO2.setUid("1");
        myCardService.add(myCardDO2);

        Assert.fail();
    } catch (DuplicateKeyException e) {
        assertTrue(e.getMessage().contains("E11000 duplicate key error collection: opportunity-test.pro_mycard index: uid dup key: { : \"1\" }"));
    }

Если я запускаю этот метод теста напрямую, все в порядке, но я запускаю весь MyCardServiceTest, этот метод не удался, и из Wireshark Iзнать, что createIndexes выполняется только один раз, если отбросить коллекцию, он не будет снова создаватьIndexes

@After
public void tearDown() {
    mongoTemplate.dropCollection(MyCardDO.class);
}   

Так как же позволить Spring выполнять createIndexes перед каждым тестовым методом?то есть

@Before
public void setUp() {
    // how to auto execute createIndexes before every test method
    // prepare some test data
    myCardService.add(myCardDO1);

}

пс

@RunWith(SpringRunner.class)
@DataMongoTest(includeFilters = @ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE,value={MyCardService.class}))
@ActiveProfiles("test")
@Import(SpringMongoConfig.class)
public class MyCardServiceTest {
    //...
}

Скриншот Wireshark enter image description here

1 Ответ

0 голосов
/ 23 марта 2019

Завершить мое разрешение:

@After
public void tearDown() {
    mongoTemplate.remove(new Query(), MyCardDO.class);
}
@AfterClass
public static void finalClean() {
    mongoTemplate.dropCollection(MyCardDO.class);
}

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

...