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; | ||||
| 
 | ||||
| import java.lang.reflect.Field; | ||||
| import java.lang.reflect.Modifier; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| 
 | ||||
|  | @ -62,6 +63,9 @@ class ServiceConnectionContextCustomizerFactory implements ContextCustomizerFact | |||
| 
 | ||||
| 	private ContainerConnectionSource<?, ?, ?> createSource(Field field, | ||||
| 			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); | ||||
| 		Object fieldValue = getFieldValue(field); | ||||
| 		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 static org.assertj.core.api.Assertions.assertThat; | ||||
| import static org.assertj.core.api.Assertions.assertThatIllegalStateException; | ||||
| 
 | ||||
| /** | ||||
|  * Tests for {@link ServiceConnectionContextCustomizerFactory}. | ||||
|  | @ -55,6 +56,13 @@ public class ServiceConnectionContextCustomizerFactoryTests { | |||
| 		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 { | ||||
| 
 | ||||
| 	} | ||||
|  | @ -77,6 +85,13 @@ public class ServiceConnectionContextCustomizerFactoryTests { | |||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	static class NonStaticServiceConnection { | ||||
| 
 | ||||
| 		@ServiceConnection(TestConnectionDetails.class) | ||||
| 		private GenericContainer<?> service = new GenericContainer<>("example"); | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	static class TestConnectionDetails implements ConnectionDetails { | ||||
| 
 | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue