Skip to content

@TestBean factory method not found in multi-level @Nested hierarchy #32951

Closed
@sbrannen

Description

@sbrannen

Overview

Currently, a @TestBean factory method will be found in the directly enclosing class for a @Nested test class; however, such a factory method will not be found in the enclosing class of the enclosing class, etc.

In other words, the search algorithm for a factory method must be recursive when searching enclosing classes for @Nested test classes.

Example

NestedLevel1 passes because the testField1() factory method is found, but NestedLevel2 fails because the testField2() factory method cannot be found.

@SpringJUnitConfig
class MultipleNestingLevels {

	static String testField1() {
		return "one";
	}

	static String testField2() {
		return "two";
	}

	@Nested
	class NestedLevel1 {

		@TestBean(name = "field1", methodName = "testField1")
		String field1;

		@Test
		void test() {
			assertThat(field1).isEqualTo("one");
		}

		@Nested
		class NestedLevel2 {

			@TestBean(name = "field2", methodName = "testField2")
			String field2;

			@Test
			void test() {
				assertThat(field1).isEqualTo("one");
				assertThat(field2).isEqualTo("two");
			}
		}
	}

	@Configuration
	static class Config {
		@Bean
		String field1() {
			return "replace me 1";
		}

		@Bean
		String field2() {
			return "replace me 2";
		}
	}

}

Metadata

Metadata

Assignees

Labels

in: testIssues in the test moduletype: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions