连接到非标准Benchbase端口以进行集成测试

时间:2018-11-26 09:18:21

标签: integration-testing couchbase spring-data-couchbase

我正在尝试为连接到沙发床的Spring Boot应用程序设置自动化集成测试。我想使用随机可用端口针对新的容器化数据库进行测试,这样我们就不必担心开发人员机器上或持续集成环境中的端口冲突。

到目前为止,我已经创建了一个测试,该测试使用com.palantir.docker.compose.DockerComposeRule启动couchbase docker image,以在随机可用端口上公开标准端口。但是,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");
    }
}

0 个答案:

没有答案