Я пытаюсь настроить автоматические интеграционные тесты для приложения Spring Boot, которое подключается к couchbase.Я хочу протестировать свежую контейнерную базу данных с использованием случайных доступных портов, чтобы нам не приходилось беспокоиться о коллизиях портов на компьютерах разработчиков или в средах непрерывной интеграции.
До сих пор я создал тест, в котором используютсяcom.palantir.docker.compose.DockerComposeRule
для раскрутки образа док-станции couchbase , который предоставляет стандартные порты на случайных доступных портах.Однако org.springframework.boot.autoconfigure.couchbase.CouchbaseProperties не предоставляет никаких свойств для портов.
Я вижу, что org.springframework.data.couchbase.config.CouchbaseEnvironmentParser предполагает, что существует какой-то способ настройки портов.Я не смог понять, как его использовать.Кто-нибудь еще мог сделать это?
Вот так выглядит мой тест:
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
@Category(IntegrationTest.class)
public class BiscuitRepositoryIT {
private static final int COUCHBASE_PORT = 8091;
private static final String COUCHBASE_SERVICE = "couchbase";
@ClassRule
public static DockerComposeRule docker = DockerComposeRule.builder()
.file("src/test/resources/docker-compose-couchbase.yml")
.projectName(ProjectName.random())
.waitingForService(COUCHBASE_SERVICE, HealthChecks.toHaveAllPortsOpen())
.build();
@Autowired
private BiscuitRepositoryConfig config;
@Autowired
private BiscuitRepository biscuitRepository;
@BeforeClass
public static void initialize() {
DockerPort couchbase = docker.containers()
.container(COUCHBASE_SERVICE)
.port(COUCHBASE_PORT);
log.info("couchbase ports: {}", couchbase);
// TODO update integration-test properties file with the ports
// before the spring context starts.
}
@After
public void tearDown() throws Exception {
biscuitRepository.deleteAll();
}
@Test
public void insertBiscuit() throws Exception {
Biscuit digestive = Biscuit.builder().name("digestive").manufacturer("biscuitCorp").build();
Biscuit persistedBiscuit = biscuitRepository.save(digestive);
assertThat(persistedBiscuit).isEqualToIgnoringGivenFields(digestive, "id", "version");
}
}