|
141 | 141 | * @author Madhura Bhave
|
142 | 142 | * @author Brian Clozel
|
143 | 143 | * @author Artsiom Yudovin
|
| 144 | + * @author Marten Deinum |
144 | 145 | */
|
145 | 146 | @ExtendWith(OutputCaptureExtension.class)
|
146 | 147 | class SpringApplicationTests {
|
@@ -1179,6 +1180,29 @@ void customApplicationStartupPublishStartupSteps() {
|
1179 | 1180 | assertThat(startCount).isEqualTo(endCount);
|
1180 | 1181 | }
|
1181 | 1182 |
|
| 1183 | + @Test |
| 1184 | + void customApplicationStartupPublishStartupStepsWithFailure() { |
| 1185 | + ApplicationStartup applicationStartup = mock(ApplicationStartup.class); |
| 1186 | + StartupStep startupStep = mock(StartupStep.class); |
| 1187 | + given(applicationStartup.start(anyString())).willReturn(startupStep); |
| 1188 | + given(startupStep.tag(anyString(), anyString())).willReturn(startupStep); |
| 1189 | + given(startupStep.tag(anyString(), ArgumentMatchers.<Supplier<String>>any())).willReturn(startupStep); |
| 1190 | + SpringApplication application = new SpringApplication(BrokenPostConstructConfig.class); |
| 1191 | + application.setWebApplicationType(WebApplicationType.NONE); |
| 1192 | + application.setApplicationStartup(applicationStartup); |
| 1193 | + assertThatExceptionOfType(BeanCreationException.class).isThrownBy(application::run); |
| 1194 | + |
| 1195 | + verify(applicationStartup).start("spring.boot.application.starting"); |
| 1196 | + verify(applicationStartup).start("spring.boot.application.environment-prepared"); |
| 1197 | + verify(applicationStartup).start("spring.boot.application.failed"); |
| 1198 | + |
| 1199 | + long startCount = mockingDetails(applicationStartup).getInvocations().stream() |
| 1200 | + .filter((invocation) -> invocation.getMethod().toString().contains("start(")).count(); |
| 1201 | + long endCount = mockingDetails(startupStep).getInvocations().stream() |
| 1202 | + .filter((invocation) -> invocation.getMethod().toString().contains("end(")).count(); |
| 1203 | + assertThat(startCount).isEqualTo(endCount); |
| 1204 | + } |
| 1205 | + |
1182 | 1206 | private <S extends AvailabilityState> ArgumentMatcher<ApplicationEvent> isAvailabilityChangeEventWithState(
|
1183 | 1207 | S state) {
|
1184 | 1208 | return (argument) -> (argument instanceof AvailabilityChangeEvent<?>)
|
|
0 commit comments