diff --git a/framework-docs/modules/ROOT/pages/testing/annotations/integration-spring/annotation-testbean.adoc b/framework-docs/modules/ROOT/pages/testing/annotations/integration-spring/annotation-testbean.adoc index 3da3da2a4fc..beaca680f75 100644 --- a/framework-docs/modules/ROOT/pages/testing/annotations/integration-spring/annotation-testbean.adoc +++ b/framework-docs/modules/ROOT/pages/testing/annotations/integration-spring/annotation-testbean.adoc @@ -5,19 +5,19 @@ `ApplicationContext` with an instance provided by a conventionally named static factory method. -By default, the associated factory method name is derived from the annotated field's name, -but the annotation allows for a specific method name to be provided. +The associated factory method name is derived from the annotated field's name, or bean +name if specified. A `static` method with no argument that returns a type compatible +with the type of the bean to override is expected. To make things more explicit, or if +you'd rather use a different name, the annotation allows for a specific method name to +be provided. -The `@TestBean` annotation uses the `REPLACE_DEFINITION` -xref:testing/testcontext-framework/bean-overriding.adoc#testcontext-bean-overriding-custom[strategy for test bean overriding]. By default, the annotated field's type is used to search for candidate definitions to override. In that case it is required that exactly one definition matches, but note that `@Qualifier` annotations are also taken into account for the purpose of matching. Users can also make things entirely explicit by specifying a bean `name` in the annotation. -The following example shows how to fully configure the `@TestBean` annotation, with -explicit values equivalent to the defaults: +The following example shows how to use the default behavior of the `@TestBean` annotation: [tabs] ====== @@ -26,17 +26,41 @@ Java:: [source,java,indent=0,subs="verbatim,quotes",role="primary"] ---- class OverrideBeanTests { - @TestBean(name = "service", methodName = "serviceTestOverride") // <1> + @TestBean // <1> private CustomService service; // test case body... - private static CustomService serviceTestOverride() { // <2> + private static CustomService service() { // <2> return new MyFakeCustomService(); } } ---- -<1> Mark a field for bean overriding in this test class. +<1> Mark a field for overriding of the bean with type `CustomService`. +<2> The result of this static method will be used as the instance and injected into the field. +====== + + +The following example shows how to fully configure the `@TestBean` annotation: + +[tabs] +====== +Java:: ++ +[source,java,indent=0,subs="verbatim,quotes",role="primary"] +---- + class OverrideBeanTests { + @TestBean(name = "service", methodName = "createCustomService") // <1> + private CustomService service; + + // test case body... + + private static CustomService createCustomService() { // <2> + return new MyFakeCustomService(); + } + } +---- +<1> Mark a field for overriding of the bean with name `service`. <2> The result of this static method will be used as the instance and injected into the field. ====== diff --git a/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBean.java b/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBean.java index d4cc67bb7ad..ec5f92679af 100644 --- a/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBean.java +++ b/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBean.java @@ -43,9 +43,9 @@ import org.springframework.test.context.bean.override.BeanOverride; * * *

Consider the following example. @@ -58,16 +58,16 @@ import org.springframework.test.context.bean.override.BeanOverride; * * // Tests * - * private static CustomerRepository repositoryTestOverride() { + * private static CustomerRepository repository() { * return new TestCustomerRepository(); * } * } * *

In the example above, the {@code repository} bean is replaced by the - * instance generated by the {@code repositoryTestOverride()} method. Not only - * is the overridden instance injected into the {@code repository} field, but it - * is also replaced in the {@code BeanFactory} so that other injection points - * for that bean use the overridden bean instance. + * instance generated by the {@code repository()} method. Not only is the + * overridden instance injected into the {@code repository} field, but it is + * also replaced in the {@code BeanFactory} so that other injection points for + * that bean use the overridden bean instance. * *

To make things more explicit, the bean and method names can be set, * as shown in the following example. @@ -75,7 +75,7 @@ import org.springframework.test.context.bean.override.BeanOverride; *


  * class CustomerServiceTests {
  *
- *     @TestBean(name = "repository", methodName = "createTestCustomerRepository")
+ *     @TestBean(name = "customerRepository", methodName = "createTestCustomerRepository")
  *     private CustomerRepository repository;
  *
  *     // Tests
@@ -97,14 +97,6 @@ import org.springframework.test.context.bean.override.BeanOverride;
 @BeanOverride(TestBeanOverrideProcessor.class)
 public @interface TestBean {
 
-	/**
-	 * Required suffix for the name of a factory method that overrides a bean
-	 * instance when the factory method is detected by convention.
-	 * @see #methodName()
-	 */
-	String CONVENTION_SUFFIX = "TestOverride";
-
-
 	/**
 	 * Alias for {@link #name()}.
 	 * 

Intended to be used when no other attributes are needed — for @@ -130,8 +122,7 @@ public @interface TestBean { * also considered. Similarly, in case the test class inherits from a base * class the whole class hierarchy is considered. *

If left unspecified, the name of the factory method will be detected - * based on convention. - * @see #CONVENTION_SUFFIX + * based either on the name of the annotated field or the name of the bean. */ String methodName() default ""; diff --git a/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessor.java b/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessor.java index a4d03fc77c9..2769001a48d 100644 --- a/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessor.java +++ b/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessor.java @@ -21,9 +21,11 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import org.springframework.core.MethodIntrospector; import org.springframework.core.ResolvableType; @@ -41,6 +43,7 @@ import org.springframework.util.StringUtils; * * @author Simon Baslé * @author Sam Brannen + * @author Stephane Nicoll * @since 6.2 */ class TestBeanOverrideProcessor implements BeanOverrideProcessor { @@ -58,14 +61,14 @@ class TestBeanOverrideProcessor implements BeanOverrideProcessor { overrideMethod = findTestBeanFactoryMethod(testClass, field.getType(), methodName); } else { - // Otherwise, search for candidate factory methods using the convention - // suffix and the field name or explicit bean name (if any). + // Otherwise, search for candidate factory methods the field name + // or explicit bean name (if any). List candidateMethodNames = new ArrayList<>(); - candidateMethodNames.add(field.getName() + TestBean.CONVENTION_SUFFIX); + candidateMethodNames.add(field.getName()); String beanName = testBeanAnnotation.name(); if (StringUtils.hasText(beanName)) { - candidateMethodNames.add(beanName + TestBean.CONVENTION_SUFFIX); + candidateMethodNames.add(beanName); } overrideMethod = findTestBeanFactoryMethod(testClass, field.getType(), candidateMethodNames); } @@ -75,7 +78,7 @@ class TestBeanOverrideProcessor implements BeanOverrideProcessor { /** * Find a test bean factory {@link Method} for the given {@link Class}. - *

Delegates to {@link #findTestBeanFactoryMethod(Class, Class, List)}. + *

Delegates to {@link #findTestBeanFactoryMethod(Class, Class, Collection)}. */ Method findTestBeanFactoryMethod(Class clazz, Class methodReturnType, String... methodNames) { return findTestBeanFactoryMethod(clazz, methodReturnType, List.of(methodNames)); @@ -104,7 +107,7 @@ class TestBeanOverrideProcessor implements BeanOverrideProcessor { * @throws IllegalStateException if a matching factory method cannot * be found or multiple methods match */ - Method findTestBeanFactoryMethod(Class clazz, Class methodReturnType, List methodNames) { + Method findTestBeanFactoryMethod(Class clazz, Class methodReturnType, Collection methodNames) { Assert.notEmpty(methodNames, "At least one candidate method name is required"); Set supportedNames = new LinkedHashSet<>(methodNames); MethodFilter methodFilter = method -> (Modifier.isStatic(method.getModifiers()) && @@ -113,16 +116,16 @@ class TestBeanOverrideProcessor implements BeanOverrideProcessor { Set methods = findMethods(clazz, methodFilter); - Assert.state(!methods.isEmpty(), () -> """ - Failed to find a static test bean factory method in %s with return type %s \ - whose name matches one of the supported candidates %s""".formatted( - clazz.getName(), methodReturnType.getName(), supportedNames)); + String methodNamesDescription = supportedNames.stream() + .map(name -> name + "()").collect(Collectors.joining(" or ")); + Assert.state(!methods.isEmpty(), () -> + "No static method found named %s in %s with return type %s".formatted( + methodNamesDescription, clazz.getName(), methodReturnType.getName())); long uniqueMethodNameCount = methods.stream().map(Method::getName).distinct().count(); - Assert.state(uniqueMethodNameCount == 1, () -> """ - Found %d competing static test bean factory methods in %s with return type %s \ - whose name matches one of the supported candidates %s""".formatted( - uniqueMethodNameCount, clazz.getName(), methodReturnType.getName(), supportedNames)); + Assert.state(uniqueMethodNameCount == 1, () -> + "Found %d competing static methods named %s in %s with return type %s".formatted( + uniqueMethodNameCount, methodNamesDescription, clazz.getName(), methodReturnType.getName())); return methods.iterator().next(); } diff --git a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/AbstractTestBeanIntegrationTestCase.java b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/AbstractTestBeanIntegrationTestCase.java index c4fa549b9b0..7a5407363a9 100644 --- a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/AbstractTestBeanIntegrationTestCase.java +++ b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/AbstractTestBeanIntegrationTestCase.java @@ -32,11 +32,11 @@ abstract class AbstractTestBeanIntegrationTestCase { @TestBean(name = "thirdBean") Pojo anotherBean; - static Pojo otherBeanTestOverride() { + static Pojo otherBean() { return new FakePojo("otherBean in superclass"); } - static Pojo thirdBeanTestOverride() { + static Pojo thirdBean() { return new FakePojo("third in superclass"); } diff --git a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanByTypeIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanByTypeIntegrationTests.java index 73769e21c8e..c8627752388 100644 --- a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanByTypeIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanByTypeIntegrationTests.java @@ -80,7 +80,7 @@ class FailingTestBeanByTypeIntegrationTests { void test() { } - static ExampleService exampleTestOverride() { + static ExampleService example() { return fail("unexpected override"); } @@ -100,7 +100,7 @@ class FailingTestBeanByTypeIntegrationTests { void test() { } - static ExampleService exampleTestOverride() { + static ExampleService example() { return fail("unexpected override"); } diff --git a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanInheritanceIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanInheritanceIntegrationTests.java index c6289d6323e..4c32cbe5501 100644 --- a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanInheritanceIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanInheritanceIntegrationTests.java @@ -18,6 +18,7 @@ package org.springframework.test.context.bean.override.convention; import org.junit.jupiter.api.Test; +import org.springframework.test.context.bean.override.convention.AbstractTestBeanIntegrationTestCase.Pojo; import org.springframework.test.context.junit.EngineTestKitUtils; import static org.junit.platform.testkit.engine.EventConditions.finishedWithFailure; @@ -40,10 +41,8 @@ class FailingTestBeanInheritanceIntegrationTests { EngineTestKitUtils.executeTestsForClass(testClass).assertThatEvents().haveExactly(1, finishedWithFailure( instanceOf(IllegalStateException.class), - message(""" - Failed to find a static test bean factory method in %s with return type %s \ - whose name matches one of the supported candidates [someBeanTestOverride]""" - .formatted(testClass.getName(), AbstractTestBeanIntegrationTestCase.Pojo.class.getName())))); + message("No static method found named someBean() in %s with return type %s" + .formatted(FieldInSupertypeButNoMethodTestCase.class.getName(), Pojo.class.getName())))); } @Test @@ -52,11 +51,8 @@ class FailingTestBeanInheritanceIntegrationTests { EngineTestKitUtils.executeTestsForClass(testClass).assertThatEvents().haveExactly(1, finishedWithFailure( instanceOf(IllegalStateException.class), - message(""" - Found 2 competing static test bean factory methods in %s with return type %s \ - whose name matches one of the supported candidates \ - [anotherBeanTestOverride, thirdBeanTestOverride]""" - .formatted(testClass.getName(), AbstractTestBeanIntegrationTestCase.Pojo.class.getName())))); + message("Found 2 competing static methods named anotherBean() or thirdBean() in %s with return type %s" + .formatted(Method1InSupertypeAndMethod2InTypeTestCase.class.getName(), Pojo.class.getName())))); } @@ -69,11 +65,11 @@ class FailingTestBeanInheritanceIntegrationTests { static class Method1InSupertypeAndMethod2InTypeTestCase extends AbstractTestBeanIntegrationTestCase { - static Pojo someBeanTestOverride() { + static Pojo someBean() { return new FakePojo("ignored"); } - static Pojo anotherBeanTestOverride() { + static Pojo anotherBean() { return new FakePojo("sub2"); } diff --git a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanIntegrationTests.java index f7958c4f457..1c96fe5da37 100644 --- a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/FailingTestBeanIntegrationTests.java @@ -66,25 +66,21 @@ class FailingTestBeanIntegrationTests { @Test void testBeanFailingNoImplicitMethod() { - Class testClass = ExplicitTestOverrideMethodNotPresentTestCase.class; + Class testClass = ExplicitOverrideMethodNotPresentTestCase.class; EngineTestKitUtils.executeTestsForClass(testClass).assertThatEvents().haveExactly(1, finishedWithFailure( instanceOf(IllegalStateException.class), - message(""" - Failed to find a static test bean factory method in %s with return type \ - java.lang.String whose name matches one of the supported candidates \ - [notPresent]""".formatted(testClass.getName())))); + message("No static method found named notPresent() in %s with return type %s" + .formatted(testClass.getName(), String.class.getName())))); } @Test void testBeanFailingNoExplicitMethod() { - Class testClass = ImplicitTestOverrideMethodNotPresentTestCase.class; + Class testClass = ImplicitOverrideMethodNotPresentTestCase.class; EngineTestKitUtils.executeTestsForClass(testClass).assertThatEvents().haveExactly(1, finishedWithFailure(instanceOf(IllegalStateException.class), - message(""" - Failed to find a static test bean factory method in %s with return type \ - java.lang.String whose name matches one of the supported candidates \ - [fieldTestOverride]""".formatted(testClass.getName())))); + message("No static method found named field() in %s with return type %s" + .formatted(testClass.getName(), String.class.getName())))); } @Test @@ -111,7 +107,7 @@ class FailingTestBeanIntegrationTests { fail("should fail earlier"); } - static String noOriginalBeanTestOverride() { + static String noOriginalBean() { return "should be ignored"; } } @@ -127,13 +123,13 @@ class FailingTestBeanIntegrationTests { fail("should fail earlier"); } - static String notPresentTestOverride() { + static String notPresent() { return "should be ignored"; } } @SpringJUnitConfig - static class ExplicitTestOverrideMethodNotPresentTestCase { + static class ExplicitOverrideMethodNotPresentTestCase { @TestBean(methodName = "notPresent") String field; @@ -145,9 +141,9 @@ class FailingTestBeanIntegrationTests { } @SpringJUnitConfig - static class ImplicitTestOverrideMethodNotPresentTestCase { + static class ImplicitOverrideMethodNotPresentTestCase { - @TestBean // expects fieldTestOverride method + @TestBean // expects field method String field; @Test @@ -167,7 +163,7 @@ class FailingTestBeanIntegrationTests { fail("should fail earlier"); } - static String fieldTestOverride() { + static String field() { return "should be ignored"; } diff --git a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanByTypeIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanByTypeIntegrationTests.java index 70003428a32..8646ab76ffe 100644 --- a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanByTypeIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanByTypeIntegrationTests.java @@ -51,7 +51,7 @@ public class TestBeanByTypeIntegrationTests { @CustomQualifier StringBuilder anyNameForStringBuilder2; - static ExampleService anyNameForServiceTestOverride() { + static ExampleService anyNameForService() { return new RealExampleService("Mocked greeting"); } diff --git a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanInheritanceIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanInheritanceIntegrationTests.java index 22c3a5c39a4..dc7db7f9411 100644 --- a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanInheritanceIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanInheritanceIntegrationTests.java @@ -57,12 +57,12 @@ public class TestBeanInheritanceIntegrationTests { @TestBean(name = "pojo2", methodName = "enclosingClassBeanOverride") Pojo pojo2; - static Pojo someBeanTestOverride() { + static Pojo someBean() { return new FakePojo("someBeanOverride"); } - // Hides otherBeanTestOverride() defined in AbstractTestBeanIntegrationTestCase. - static Pojo otherBeanTestOverride() { + // Hides otherBean() defined in AbstractTestBeanIntegrationTestCase. + static Pojo otherBean() { return new FakePojo("otherBean in subclass"); } diff --git a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanIntegrationTests.java index a9cd9286ba5..e2665aea31f 100644 --- a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanIntegrationTests.java @@ -50,17 +50,17 @@ public class TestBeanIntegrationTests { @TestBean(name = "nestedField") String renamed2; - @TestBean(name = "methodRenamed1", methodName = "fieldTestOverride") + @TestBean(name = "methodRenamed1", methodName = "field") String methodRenamed1; - @TestBean(name = "methodRenamed2", methodName = "nestedFieldTestOverride") + @TestBean(name = "methodRenamed2", methodName = "nestedField") String methodRenamed2; - static String fieldTestOverride() { + static String field() { return "fieldOverride"; } - static String nestedFieldTestOverride() { + static String nestedField() { return "nestedFieldOverride"; } @@ -133,7 +133,7 @@ public class TestBeanIntegrationTests { @DisplayName("With factory method in enclosing class") public class TestBeanFactoryMethodInEnclosingClassTests { - @TestBean(methodName = "nestedFieldTestOverride", name = "nestedField") + @TestBean(methodName = "nestedField", name = "nestedField") String nestedField2; @Test @@ -146,7 +146,7 @@ public class TestBeanIntegrationTests { @DisplayName("With factory method in the enclosing class of the enclosing class") public class TestBeanFactoryMethodInEnclosingClassLevel2Tests { - @TestBean(methodName = "nestedFieldTestOverride", name = "nestedField") + @TestBean(methodName = "nestedField", name = "nestedField") String nestedField2; @Test diff --git a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideMetadataTests.java b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideMetadataTests.java index d3643181440..64b4277bb1a 100644 --- a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideMetadataTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideMetadataTests.java @@ -54,8 +54,8 @@ class TestBeanOverrideMetadataTests { void forTestClassWithMissingMethod() { assertThatIllegalStateException() .isThrownBy(() ->OverrideMetadata.forTestClass(SampleMissingMethod.class)) - .withMessageStartingWith("Failed to find a static test bean factory method") - .withMessageContaining("messageTestOverride"); + .withMessage("No static method found named message() in %s with return type %s", + SampleMissingMethod.class.getName(), String.class.getName()); } @Test @@ -122,7 +122,7 @@ class TestBeanOverrideMetadataTests { static class SampleOneOverride { - @TestBean(methodName = "message") + @TestBean String message; static String message() { @@ -133,7 +133,7 @@ class TestBeanOverrideMetadataTests { static class SampleOneOverrideWithName { - @TestBean(name = "anotherBean", methodName = "message") + @TestBean(name = "anotherBean") String message; static String message() { diff --git a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessorTests.java b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessorTests.java index 55e8abe4008..0ebbaddf44d 100644 --- a/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessorTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessorTests.java @@ -18,7 +18,6 @@ package org.springframework.test.context.bean.override.convention; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.List; import org.junit.jupiter.api.Test; @@ -70,10 +69,8 @@ class TestBeanOverrideProcessorTests { assertThatIllegalStateException() .isThrownBy(() -> this.processor.findTestBeanFactoryMethod(clazz, returnType, "example1", "example3")) - .withMessage(""" - Failed to find a static test bean factory method in %s with return type %s \ - whose name matches one of the supported candidates %s""", - clazz.getName(), returnType.getName(), List.of("example1", "example3")); + .withMessage("No static method found named example1() or example3() in %s with return type %s", + MethodConventionTestCase.class.getName(), ExampleService.class.getName()); } @Test @@ -83,10 +80,8 @@ class TestBeanOverrideProcessorTests { assertThatIllegalStateException() .isThrownBy(() -> this.processor.findTestBeanFactoryMethod(clazz, returnType, "example2", "example4")) - .withMessage(""" - Found %d competing static test bean factory methods in %s with return type %s \ - whose name matches one of the supported candidates %s""".formatted( - 2, clazz.getName(), returnType.getName(), List.of("example2", "example4"))); + .withMessage("Found 2 competing static methods named example2() or example4() in %s with return type %s", + clazz.getName(), returnType.getName()); } @Test @@ -106,10 +101,8 @@ class TestBeanOverrideProcessorTests { assertThatIllegalStateException() .isThrownBy(() -> this.processor.createMetadata(overrideAnnotation, clazz, field)) - .withMessage(""" - Failed to find a static test bean factory method in %s with return type %s \ - whose name matches one of the supported candidates %s""", - clazz.getName(), returnType.getName(), List.of("explicit1")); + .withMessage("No static method found named explicit1() in %s with return type %s", + clazz.getName(), returnType.getName()); } @Test @@ -133,10 +126,8 @@ class TestBeanOverrideProcessorTests { assertThatIllegalStateException().isThrownBy(() -> this.processor.createMetadata( overrideAnnotation, clazz, field)) - .withMessage(""" - Failed to find a static test bean factory method in %s with return type %s \ - whose name matches one of the supported candidates %s""", - clazz.getName(), returnType.getName(), List.of("fieldTestOverride", "someFieldTestOverride")); + .withMessage("No static method found named field() or someField() in %s with return type %s", + clazz.getName(), returnType.getName()); } @Test