![](/img/trans.png)
[英]Unit Test a configuration class not working in Multi Maven Spring Boot project
[英]Spring Boot 1.5.4: exclude configuration class in unit test
我有一個 Spring Boot 項目,版本 1.5.4,有一個 MongoDb 配置類:
@Configuration
public class MongoConfig {
@Value("${spring.data.mongo.client.uri:mongodb://localhost:27017/database}")
private String mongoURI;
@Bean
public MongoDbFactory mongoFactory() throws UnknownHostException{
return new SimpleMongoDbFactory(new MongoClientURI(mongoURI));
}
@Bean
public MongoTemplate mongoTemplate() throws UnknownHostException, MongoException{
return new MongoTemplate(mongoFactory());
}
}
在我的集成測試中,我想使用Embedded Mongo ( https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo )。
問題是MongoDb配置類在Embedded mongo初始化之前就啟動了,嘗試連接數據庫,所以我的測試失敗了。 如果我刪除MongoConfig類,則所有測試都運行良好。
如何僅在我的測試執行中排除它?
通過在測試類上使用以下注釋來排除 MongoDB 自動配置。
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
然后在與您的測試類相同的路徑中創建一個配置類並在那里定義您的 mongo bean。 這將在應用程序啟動期間獲取
**@Configuration
public class MockConfigurations {
@Bean
@Primary
public MongoTemplate getMongoTemplate() {
//define your bean
return mongoTemplate;
}
}**
請參考這里的答案。 它有兩種排除配置的方法。
Spring boot:僅將@Configuration 應用於某些包
更新 1:
或者,我能想到的最有效的方法是使用 Spring 配置文件並為測試加載配置文件
定義您的 TestConfiguration 類並將其導入您的測試類。
@RunWith(SpringRunner.class)
@SpringBootTest
@Import(MyTestConfiguration.class)
public class MyTests {
@Test
public void exampleTest() {
...
}
}
更新 2:對於 EmbeddedMongoAutoConfiguration,請參閱此處的詳細答案。
我在我的測試課上用這個配置解決了這個問題:
@RunWith(SpringRunner.class)
@ComponentScan({"it.app.server.dal","it.app.server.listener"})
@DataMongoTest() //mongoDB
public class ListenerTests {
...
}
注釋@DataMongoTest()加載我的 Embedded MongoDb 並且使用@ComponentScan我可以加載我在測試中需要的服務和存儲庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.