@DynamicPropertySource

@DynamicPropertySource 是一个注解,可以应用于集成测试类中的方法,这些方法需要注册 动态 属性,以添加到为集成测试加载的 ApplicationContextEnvironment 中的 PropertySources 集合中。当您不预先知道属性的值时,动态属性会很有用——例如,如果属性由外部资源管理,例如由 Testcontainers 项目管理的容器。

以下示例演示了如何注册动态属性:

Java
@ContextConfiguration
class MyIntegrationTests {

	static MyExternalServer server = // ...

	@DynamicPropertySource [id="CO1-1"][id="CO1-1"][id="CO1-1"](1)
	static void dynamicProperties(DynamicPropertyRegistry registry) { [id="CO1-2"][id="CO1-2"][id="CO1-2"](2)
		registry.add("server.port", server::getPort); [id="CO1-3"][id="CO1-3"][id="CO1-3"](3)
	}

	// tests ...
}
<1>  使用 `@DynamicPropertySource` 注解一个 `static` 方法。
<1>  接受一个 `DynamicPropertyRegistry` 作为参数。
<1>  注册一个动态的 `server.port` 属性,以便从服务器延迟检索。
Kotlin
@ContextConfiguration
class MyIntegrationTests {

	companion object {

		@JvmStatic
		val server: MyExternalServer = // ...

		@DynamicPropertySource [id="CO2-1"][id="CO1-4"][id="CO2-1"](1)
		@JvmStatic
		fun dynamicProperties(registry: DynamicPropertyRegistry) { [id="CO2-2"][id="CO1-5"][id="CO2-2"](2)
			registry.add("server.port", server::getPort) [id="CO2-3"][id="CO1-6"][id="CO2-3"](3)
		}
	}

	// tests ...
}
<1>  使用 `@DynamicPropertySource` 注解一个 `static` 方法。
<1>  接受一个 `DynamicPropertyRegistry` 作为参数。
<1>  注册一个动态的 `server.port` 属性,以便从服务器延迟检索。

有关更多详细信息,请参阅 使用动态属性源进行上下文配置