1616
1717package org .springframework .boot .diagnostics .analyzer ;
1818
19+ import java .util .function .Supplier ;
20+
1921import org .junit .jupiter .api .Test ;
2022
2123import org .springframework .beans .factory .support .BeanDefinitionOverrideException ;
2224import org .springframework .boot .diagnostics .FailureAnalysis ;
25+ import org .springframework .context .ApplicationContextInitializer ;
2326import org .springframework .context .annotation .AnnotationConfigApplicationContext ;
2427import org .springframework .context .annotation .Bean ;
2528import org .springframework .context .annotation .Configuration ;
@@ -43,6 +46,18 @@ void analyzeBeanDefinitionOverrideException() {
4346 assertThat (description ).contains (FirstConfiguration .class .getName ());
4447 }
4548
49+ @ Test
50+ void analyzeBeanDefinitionOverrideExceptionWithDefinitionsWithNoResourceDescription () {
51+ FailureAnalysis analysis = performAnalysis ((context ) -> {
52+ context .registerBean ("testBean" , String .class , (Supplier <String >) String ::new );
53+ context .registerBean ("testBean" , String .class , (Supplier <String >) String ::new );
54+ });
55+ String description = analysis .getDescription ();
56+ assertThat (description )
57+ .isEqualTo ("The bean 'testBean' could not be registered. A bean with that name has already"
58+ + " been defined and overriding is disabled." );
59+ }
60+
4661 private FailureAnalysis performAnalysis (Class <?> configuration ) {
4762 BeanDefinitionOverrideException failure = createFailure (configuration );
4863 assertThat (failure ).isNotNull ();
@@ -63,6 +78,28 @@ private BeanDefinitionOverrideException createFailure(Class<?> configuration) {
6378 }
6479 }
6580
81+ private FailureAnalysis performAnalysis (
82+ ApplicationContextInitializer <AnnotationConfigApplicationContext > initializer ) {
83+ BeanDefinitionOverrideException failure = createFailure (initializer );
84+ assertThat (failure ).isNotNull ();
85+ return new BeanDefinitionOverrideFailureAnalyzer ().analyze (failure );
86+ }
87+
88+ private BeanDefinitionOverrideException createFailure (
89+ ApplicationContextInitializer <AnnotationConfigApplicationContext > initializer ) {
90+ try {
91+ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ();
92+ context .setAllowBeanDefinitionOverriding (false );
93+ initializer .initialize (context );
94+ context .refresh ();
95+ context .close ();
96+ return null ;
97+ }
98+ catch (BeanDefinitionOverrideException ex ) {
99+ return ex ;
100+ }
101+ }
102+
66103 @ Configuration (proxyBeanMethods = false )
67104 @ Import ({ FirstConfiguration .class , SecondConfiguration .class })
68105 static class BeanOverrideConfiguration {
0 commit comments