Spring Boot: интеграционные тесты с использованием Testcontainers завершаются неудачей при использовании свойства SpringJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Boot: интеграционные тесты с использованием Testcontainers завершаются неудачей при использовании свойства Spring

Сообщение Anonymous »

У меня есть набор рабочих интеграционных тестов с Testcontainers и контейнером MongoDB. В рамках теста при запуске тестов производится импорт данных. Для этого я написал класс конфигурации:

Код: Выделить всё

@ActiveProfiles({ "test", "integration" })
@TestConfiguration(proxyBeanMethods = false)
public class TestContainersConfiguration {

@Bean
@ServiceConnection
public MongoDBContainer mongoDbContainer() throws UnsupportedOperationException, IOException, InterruptedException {

var mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.4"));

mongoDBContainer.start();
mongoDBContainer.copyFileToContainer(MountableFile.forClasspathResource("testResources.json"),
"/publications.json");
mongoDBContainer.execInContainer("mongoimport",
"--db", "documents",
"--mode", "upsert",
"--collection", "dspacePublication", "--file",
"/publications.json", "--jsonArray", "--quiet");

return mongoDBContainer;

}

}
Все мои интеграционные тесты расширяют абстрактный класс:

Код: Выделить всё

@ActiveProfiles({ "test", "integration" })
@Import(TestContainersConfiguration.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public abstract class AbstractIntegrationTest {

@Autowired
protected MongoTemplate mongoTemplate;

@Autowired
protected WebApplicationContext webApplicationContext;

@Autowired
protected MongoDBContainer mongoDBContainer;

@BeforeEach
protected void beforeEach() throws UnsupportedOperationException, IOException, InterruptedException {
assertTrue(mongoDBContainer.isRunning());

}

}
Это один из классов интеграционных тестов:

Код: Выделить всё

@ActiveProfiles({ "test", "integration" })
@EnableAutoConfiguration
public class SearchControllerIT extends AbstractIntegrationTest {

private List publications;

@BeforeEach
public void setUp() throws Exception {

this.publications = super.mongoTemplate.findAll(Publication.class);
assertFalse(publications.isEmpty(), "an empty list of publications was returned when querying test MongoDB!");

}

// test methods
}
Все мои интеграционные тесты выполняются, когда я использую выделенные сведения о соединении MongoDB в application.properties (используя переменные среды для возможности переопределения):

Код: Выделить всё

spring.data.mongodb.database=${SPRING_DATA_MONGODB_DATABASE:documents}
spring.data.mongodb.host=${SPRING_DATA_MONGODB_HOST:mongodb}
spring.data.mongodb.port=${SPRING_DATA_MONGODB_PORT:27017}
Однако они не могут заменить эти свойства на:

Код: Выделить всё

spring.data.mongodb.uri=${SPRING_DATA_MONGODB_URI:mongodb://mongodb:27017/documents}
В этом случае mongoTemplate.findAll(Publication.class) возвращает пустой список.
Он выглядит как «@ServiceConnection» не переопределяет Spring.data.mongodb.uri, поэтому приоритет имеет файл из application.properties.
Как запустить интеграционные тесты, сохраняя при этом Spring.data.mongodb.uri в приложении .свойства?

Подробнее здесь: https://stackoverflow.com/questions/787 ... pring-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»