@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
'sourcecode' 카테고리의 다른 글
PowerShell에서 문자열을 datetime으로 변환 (0) | 2023.07.28 |
---|---|
HTML 양식 데이터를 JSON으로 서버에 보내는 방법은 무엇입니까? (0) | 2023.07.28 |
리소스 및 컨트롤러 링크 작성기를 찾을 수 없으며 더 이상 사용되지 않습니다. (0) | 2023.07.23 |
SpEL @ConditionalOnProperty 문자열 속성이 비어 있거나 null입니다. (0) | 2023.07.23 |
Oracle을 사용한 비관적인 JPA 잠금이 작동하지 않는 이유 (0) | 2023.07.23 |