From 60dca027e73d38f1b4c647076ff16d8a75d9ce67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Tue, 24 Mar 2020 09:59:34 +0100 Subject: [PATCH] Add Kotlin documentation and tests for @DynamicPropertySource See gh-24540 --- ...inDynamicPropertySourceIntegrationTests.kt | 64 +++++++++++++++++++ src/docs/asciidoc/testing.adoc | 25 ++++++++ 2 files changed, 89 insertions(+) create mode 100644 spring-test/src/test/kotlin/org/springframework/test/context/KotlinDynamicPropertySourceIntegrationTests.kt diff --git a/spring-test/src/test/kotlin/org/springframework/test/context/KotlinDynamicPropertySourceIntegrationTests.kt b/spring-test/src/test/kotlin/org/springframework/test/context/KotlinDynamicPropertySourceIntegrationTests.kt new file mode 100644 index 00000000000..f83837a051b --- /dev/null +++ b/spring-test/src/test/kotlin/org/springframework/test/context/KotlinDynamicPropertySourceIntegrationTests.kt @@ -0,0 +1,64 @@ +/* + * Copyright 2002-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.test.context + +import org.assertj.core.api.Assertions +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.annotation.Value +import org.springframework.context.annotation.Configuration +import org.springframework.context.annotation.Import +import org.springframework.stereotype.Component +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig + +/** + * Kotlin integration test for [@DynamicPropertySource][DynamicPropertySource]. + * + * @author Sebastien Deleuze + * @author Phillip Webb + * @author Sam Brannen + */ +@SpringJUnitConfig +class KotlinDynamicPropertySourceIntegrationTests { + + @Test + fun hasInjectedValues(@Autowired service: Service) { + Assertions.assertThat(service.ip).isEqualTo("127.0.0.1") + Assertions.assertThat(service.port).isEqualTo(4242) + } + + @Configuration + @Import(Service::class) + open class Config + + @Component + class Service(@Value("\${test.container.ip}") val ip: String, @Value("\${test.container.port}") val port: Int) + + class DemoContainer(val ipAddress: String = "127.0.0.1", val port: Int = 4242) + + companion object { + + @JvmStatic + val container = DemoContainer() + + @DynamicPropertySource + @JvmStatic + fun containerProperties(registry: DynamicPropertyRegistry) { + registry.add("test.container.ip") { container.ipAddress } + registry.add("test.container.port") { container.port } + } + } +} diff --git a/src/docs/asciidoc/testing.adoc b/src/docs/asciidoc/testing.adoc index c8cc246ab62..1f3dd863d78 100644 --- a/src/docs/asciidoc/testing.adoc +++ b/src/docs/asciidoc/testing.adoc @@ -4010,6 +4010,31 @@ via `@Value("${redis.host}")` and `@Value("${redis.port}")`, respectively. } ---- +[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"] +.Kotlin +---- + @SpringJUnitConfig(/* ... */) + @Testcontainers + class ExampleIntegrationTests { + + companion object { + + @Container + @JvmStatic + val redis: RedisContainer = RedisContainer() + + @DynamicPropertySource + @JvmStatic + fun redisProperties(registry: DynamicPropertyRegistry) { + registry.add("redis.host", redis::getContainerIpAddress) + registry.add("redis.port", redis::getMappedPort) + } + } + + // tests ... + + } +---- [[testcontext-ctx-management-web]] ===== Loading a `WebApplicationContext`