|
120 | 120 | import static org.mockito.ArgumentMatchers.isA;
|
121 | 121 | import static org.mockito.BDDMockito.given;
|
122 | 122 | import static org.mockito.BDDMockito.willThrow;
|
123 |
| -import static org.mockito.Mockito.atLeastOnce; |
124 |
| -import static org.mockito.Mockito.mock; |
125 |
| -import static org.mockito.Mockito.mockingDetails; |
126 |
| -import static org.mockito.Mockito.never; |
127 |
| -import static org.mockito.Mockito.spy; |
128 |
| -import static org.mockito.Mockito.verify; |
129 |
| -import static org.mockito.Mockito.verifyNoMoreInteractions; |
| 123 | +import static org.mockito.Mockito.*; |
130 | 124 |
|
131 | 125 | /**
|
132 | 126 | * Tests for {@link SpringApplication}.
|
@@ -1179,6 +1173,34 @@ void customApplicationStartupPublishStartupSteps() {
|
1179 | 1173 | assertThat(startCount).isEqualTo(endCount);
|
1180 | 1174 | }
|
1181 | 1175 |
|
| 1176 | + @Test |
| 1177 | + void customApplicationStartupPublishStartupStepsWithFailure() { |
| 1178 | + ApplicationStartup applicationStartup = mock(ApplicationStartup.class); |
| 1179 | + StartupStep startupStep = mock(StartupStep.class); |
| 1180 | + given(applicationStartup.start(anyString())).willReturn(startupStep); |
| 1181 | + given(startupStep.tag(anyString(), anyString())).willReturn(startupStep); |
| 1182 | + given(startupStep.tag(anyString(), ArgumentMatchers.<Supplier<String>>any())).willReturn(startupStep); |
| 1183 | + SpringApplication application = new SpringApplication(BrokenPostConstructConfig.class); |
| 1184 | + application.setWebApplicationType(WebApplicationType.NONE); |
| 1185 | + application.setApplicationStartup(applicationStartup); |
| 1186 | + assertThatExceptionOfType(BeanCreationException.class).isThrownBy(application::run); |
| 1187 | + |
| 1188 | + verify(applicationStartup).start("spring.boot.application.starting"); |
| 1189 | + verify(applicationStartup).start("spring.boot.application.environment-prepared"); |
| 1190 | + verify(applicationStartup).start("spring.boot.application.failed"); |
| 1191 | + |
| 1192 | + mockingDetails(applicationStartup).getInvocations().stream() |
| 1193 | + .filter((invocation) -> invocation.getMethod().toString().contains("start(")) |
| 1194 | + .map(inv -> inv.getArgument(0, String.class)) |
| 1195 | + .forEach(System.out::println); |
| 1196 | + |
| 1197 | + long startCount = mockingDetails(applicationStartup).getInvocations().stream() |
| 1198 | + .filter((invocation) -> invocation.getMethod().toString().contains("start(")).count(); |
| 1199 | + long endCount = mockingDetails(startupStep).getInvocations().stream() |
| 1200 | + .filter((invocation) -> invocation.getMethod().toString().contains("end(")).count(); |
| 1201 | + assertThat(startCount).isEqualTo(endCount); |
| 1202 | + } |
| 1203 | + |
1182 | 1204 | private <S extends AvailabilityState> ArgumentMatcher<ApplicationEvent> isAvailabilityChangeEventWithState(
|
1183 | 1205 | S state) {
|
1184 | 1206 | return (argument) -> (argument instanceof AvailabilityChangeEvent<?>)
|
|
0 commit comments