1

ユニットテスト、バージョン1.5.4での構成クラスを除外:私の統合テストで春ブーツ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()); 
} 
} 

を私は組み込みモンゴを使いたいですhttps://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo)。

問題は、MongoDb構成クラスがEmbedded mongoの初期化より前に開始され、データベースに接続しようとするため、テストが失敗することです。 MongoConfigクラスを削除すると、すべてのテストが正常に動作します。

テストの実行中にのみ除外することはできますか?

+0

私はこれがあなたの質問ではないことを知っていますが、testContainersを見てください:https://www.testcontainers.org/これは私のテスト(主に統合テスト)のためのソリューションです。 :https://areguig.github.io/test-springboot-apps-using-testContainers-and-spock/ –

答えて

1

こちらの回答を参考にしてください。構成を除外する2つの方法があります。

Spring boot: apply @Configuration to certain package only

アップデート1:テスト用

また、私は考えることができる最も効率的な方法は、春のプロファイルを使用してプロファイルをロードすることです

は、あなたのTestConfigurationクラスを定義し、テストクラスをインポートします。

@RunWith(SpringRunner.class) 
@SpringBootTest 
@Import(MyTestConfiguration.class) 
public class MyTests { 

    @Test 
    public void exampleTest() { 
     ... 
    } 

} 

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications-detecting-config

アップデート2:EmbeddedMongoAutoConfigurationについては ここに詳細な回答を参照してください。

How do you configure Embedded MongDB for integration testing in a Spring Boot application?

+0

単体テストのためのメインアプリケーションクラスを変更したくありません。 – sintetico82

+0

@Import(MyTestsConfiguration.class)は良い解決策ですが、私のテストでは無駄なクラスを読み込まないようにするシステムが見つかりました。 – sintetico82

+0

* EmbeddedMongoAutoConfiguration.classを有効にしたいので、* MyTestsConfiguration.class *の方法が分かりません。 – sintetico82

0

私は私のテストクラスのこの構成では、それを解決:私のEmbbeddedにMongoDBをロード

@RunWith(SpringRunner.class) 
@ComponentScan({"it.app.server.dal","it.app.server.listener"}) 
@DataMongoTest() //mongoDB 
public class ListenerTests { 
    ... 
} 

注釈@DataMongoTest()と@ComponentScanと私はちょうどロードすることができます私のテストで必要なサービスとレポジトリ。

+0

mongodbにアクセスするコントローラをテストしたい場合、この解決法は機能しません。 – sintetico82

関連する問題