Как отключить flapdoodle встроенный mongodb в определенных тестах - PullRequest
0 голосов
/ 02 октября 2018

Я создал приложение весенней загрузки на основе Spring Initializr (аромат gradle).

Я также добавил

compile('org.springframework.boot:spring-boot-starter-data-mongodb')

Чтобы использовать MongoDB для сохранения.Я также добавил простой интеграционный тест, который отлично работает:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class TileServiceApplicationTests {

    @Autowired
    private MockMvc mvc;

    @Autowired
    private UserSettingRepository userSettingRepository;

    @Test
    public void contextLoads() throws Exception {
        Folder folder = random( Folder.class, "color", "elements" );
        EserviceTile eserviceTile1 = random( EserviceTile.class , "color");
        EserviceTile eserviceTile2 = random( EserviceTile.class, "color" );
        folder.setElements( Arrays.asList(eserviceTile1) );
        TileList usersTiles = new TileList( Arrays.asList( folder, eserviceTile2 ) );

        userSettingRepository.save( new UserSetting( "user1", usersTiles ));


        String string = mvc.perform( get( "/user1" ) ).andExpect( status().isOk() ).andReturn().getResponse().getContentAsString();
        Assert.assertThat(string, allOf( containsString( eserviceTile1.getName() ), containsString( eserviceTile2.getName() ) ) );
    }

}

Если на порту по умолчанию работает mongodb, я вижу, что данные сохраняются.Чтобы быть независимым от запуска монго, я просто добавил:

 testCompile('de.flapdoodle.embed:de.flapdoodle.embed.mongo:2.1.1')

и вуаля, тест проходит без монго!(больше нечего добавить)

Моя проблема: Я хочу отключить встроенный Mongo для некоторых тестов .Какой самый простой способ добиться этого?

1 Ответ

0 голосов
/ 17 ноября 2018

Встроенный демон Mongo запускается с EmbeddedMongoAutoConfiguration.Вы можете отключить запуск демона в одном тесте, исключив EmbeddedMongoAutoConfiguration из проверки:

@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource(properties = "spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration")
public class DoNotStartMongoTest {
    //...

    @Test
    public void test() {
    }
}

Я бы предпочел противоположную функциональность: запускать встроенный демон Mongo по требованию.Для этого вам необходимо исключить EmbeddedMongoAutoConfiguration в производственном коде:

@EnableMongoRepositories
@SpringBootApplication(exclude = EmbeddedMongoAutoConfiguration.class)
public class MySpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApplication.class, args);
    }
}

Затем в тестовый код добавить аннотацию, которая позволит запускать встроенный демон Mongo:

@Retention(RUNTIME)
@Target(TYPE)
@Import(EmbeddedMongoAutoConfiguration.class)
public @interface EnableEmbeddedMongo {
}

и аннотировать ваш тест:

@RunWith(SpringRunner.class)
@SpringBootTest
@EnableEmbeddedMongo
public class StartMongoTest {
    //...

    @Test
    public void test() {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...