簡體   English   中英

如何在某些測試中禁用flappedoodle嵌入式mongodb

[英]How to disable flapdoodle embedded mongodb in certain tests

我基於Spring Initializr (漸變風味)創建了一個Spring Boot應用程序。

我還加了

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在默認端口上運行,我看到數據仍然存在。 為了獨立於運行mongo,我剛剛添加了:

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

瞧,測試無需mongo! (沒什么可補充的)

我的問題是: 我想對某些測試禁用嵌入式Mongo 最簡單的方法是什么?

嵌入式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() {
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM