sourcecode

@Test 컨테이너가 있는 Mongo 드라이버, 테스트가 성공적으로 실행된 후 예외 발생

copyscript 2023. 7. 28. 22:31
반응형

@Test 컨테이너가 있는 Mongo 드라이버, 테스트가 성공적으로 실행된 후 예외 발생

저는 테스트 컨테이너 mongodb를 사용하여 스프링 부트 코틀린 프로젝트 샘플에서 통합 테스트를 설정하고 있습니다.

저는 MongoDBCain을 설정했고, 모든 것이 예상대로 작동합니다. 앱이 mongodb에 연결되고 리포지토리가 있는 테스트(예: 저장, 삭제)는 완벽하게 작동하지만, 테스트가 실행된 후(성공적으로) mongodb가 실행되었음을 알게 되었습니다.운전자가 마지막에 예외를 던집니다. 컨테이너가 정상적으로 닫히거나 닫히지 않는 것처럼 보입니다. 가능합니까?

컨테이너 시작 방법의 예

companion object {
        @Container
        var mongoDBContainer = MongoDBContainer("mongo:4.4.2")

        @JvmStatic
        @DynamicPropertySource
        fun setProperties(registry: DynamicPropertyRegistry) {
            registry.add("spring.data.mongodb.uri") { mongoDBContainer.replicaSetUrl }
        }
    }

시험방법

@Test fun someTest() {
   autowiredRepository.save(document)
   ...
   ...
}

러닝 클래스의 경우, 저는 단순히 그 위에 @SpringBoot와 함께 @Testcontainers 주석을 사용하고 있습니다.테스트, 다른 건 없습니다.

결국 내가 받는 예외는

com.mongodb.MongoSocketReadException: Prematurely reached end of stream
    at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:112) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:131) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:647) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:512) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:355) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.receive(InternalStreamConnection.java:315) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:215) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.2.3.jar:na]
    at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

나는 같은 문제에 직면했고 주석을 제거하여 해결했습니다.@Container내 컨테이너에서 싱글톤으로 수동으로 시작합니다.그 이유는@Container여러 컨테이너를 시작하고 있습니다.첫 번째 것은 테스트에 의해 성공적으로 사용되고 있었고 다른 것들은 그것을 던지고 있었습니다.com.mongodb.MongoSocketReadException: Prematurely reached end of stream예외.

대체:


    @Testcontainers  
    @DataMongoTest(excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class)  
    class UserRepositoryTest {  
    
        @Container  
        static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:5.0.10");  
    
        @DynamicPropertySource  
        static void setProperties(DynamicPropertyRegistry registry) {  
            registry.add("spring.data.mongodb.uri", mongoDBContainer::getReplicaSetUrl);  
        }
    }

이와 함께.


    @Testcontainers  
    @DataMongoTest(excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class)  
    class UserRepositoryTest {  
    
        static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:5.0.13");
    
        static {
            mongoDBContainer.start();
        }
    
        @DynamicPropertySource  
        static void setProperties(DynamicPropertyRegistry registry) {  
            registry.add("spring.data.mongodb.uri", mongoDBContainer::getReplicaSetUrl);  
        }
    }

봄까지 제공되는 기본 mongo Embedded를 제외하려고 했습니까?

Kotlin에서는 잘 모르지만 Java에서는 다음과 같습니다.

@Testcontainers  
@DataMongoTest(excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class)  
class UserRepositoryTest {  

    @Container  
    static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:5.0.10");  

    @DynamicPropertySource  
    static void setProperties(DynamicPropertyRegistry registry) {  
        registry.add("spring.data.mongodb.uri", mongoDBContainer::getReplicaSetUrl);  
    }
}

언급URL : https://stackoverflow.com/questions/68456504/mongo-driver-with-testcontainers-throws-exceptions-after-tests-run-successfull

반응형