Improve diagnostics with @ServiceConnection on non-static field
Closes gh-34795
This commit is contained in:
parent
2267430bdb
commit
d8d6cb7323
|
|
@ -17,6 +17,7 @@
|
||||||
package org.springframework.boot.test.autoconfigure.service.connection;
|
package org.springframework.boot.test.autoconfigure.service.connection;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -62,6 +63,9 @@ class ServiceConnectionContextCustomizerFactory implements ContextCustomizerFact
|
||||||
|
|
||||||
private ContainerConnectionSource<?, ?, ?> createSource(Field field,
|
private ContainerConnectionSource<?, ?, ?> createSource(Field field,
|
||||||
MergedAnnotation<ServiceConnection> annotation) {
|
MergedAnnotation<ServiceConnection> annotation) {
|
||||||
|
if (!Modifier.isStatic(field.getModifiers())) {
|
||||||
|
throw new IllegalStateException("@ServiceConnection field '%s' must be static".formatted(field.getName()));
|
||||||
|
}
|
||||||
Class<? extends ConnectionDetails> connectionDetailsType = getConnectionDetailsType(annotation);
|
Class<? extends ConnectionDetails> connectionDetailsType = getConnectionDetailsType(annotation);
|
||||||
Object fieldValue = getFieldValue(field);
|
Object fieldValue = getFieldValue(field);
|
||||||
Assert.isInstanceOf(GenericContainer.class, fieldValue,
|
Assert.isInstanceOf(GenericContainer.class, fieldValue,
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.service.connection.ConnectionDetai
|
||||||
import org.springframework.boot.test.autoconfigure.service.connection.ServiceConnectionContextCustomizerFactoryTests.ServiceConnections.NestedClass;
|
import org.springframework.boot.test.autoconfigure.service.connection.ServiceConnectionContextCustomizerFactoryTests.ServiceConnections.NestedClass;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link ServiceConnectionContextCustomizerFactory}.
|
* Tests for {@link ServiceConnectionContextCustomizerFactory}.
|
||||||
|
|
@ -55,6 +56,13 @@ public class ServiceConnectionContextCustomizerFactoryTests {
|
||||||
assertThat(customizer.getSources()).hasSize(3);
|
assertThat(customizer.getSources()).hasSize(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenClassHasNonStaticServiceConnectionThenCreateShouldFailWithHelpfulIllegalStateException() {
|
||||||
|
assertThatIllegalStateException()
|
||||||
|
.isThrownBy(() -> this.factory.createContextCustomizer(NonStaticServiceConnection.class, null))
|
||||||
|
.withMessage("@ServiceConnection field 'service' must be static");
|
||||||
|
}
|
||||||
|
|
||||||
static class NoServiceConnections {
|
static class NoServiceConnections {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -77,6 +85,13 @@ public class ServiceConnectionContextCustomizerFactoryTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class NonStaticServiceConnection {
|
||||||
|
|
||||||
|
@ServiceConnection(TestConnectionDetails.class)
|
||||||
|
private GenericContainer<?> service = new GenericContainer<>("example");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static class TestConnectionDetails implements ConnectionDetails {
|
static class TestConnectionDetails implements ConnectionDetails {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue