FailureAnalyzersTests Class — spring-boot Architecture
Architecture documentation for the FailureAnalyzersTests class in FailureAnalyzersTests.java from the spring-boot codebase.
Entity Profile
Source Code
core/spring-boot/src/test/java/org/springframework/boot/diagnostics/FailureAnalyzersTests.java lines 42–154
@ExtendWith(OutputCaptureExtension.class)
class FailureAnalyzersTests {
@SuppressWarnings("NullAway.Init")
private static FailureAnalyzer failureAnalyzer;
private final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
@BeforeEach
void configureMock() {
failureAnalyzer = mock(FailureAnalyzer.class);
}
@Test
void analyzersAreLoadedAndCalled() {
RuntimeException failure = new RuntimeException();
analyzeAndReport(failure, BasicFailureAnalyzer.class, BasicFailureAnalyzer.class);
then(failureAnalyzer).should(times(2)).analyze(failure);
}
@Test
void analyzerIsConstructedWithBeanFactory() {
RuntimeException failure = new RuntimeException();
analyzeAndReport(failure, BasicFailureAnalyzer.class, BeanFactoryConstructorFailureAnalyzer.class);
then(failureAnalyzer).should(times(2)).analyze(failure);
}
@Test
void analyzerIsConstructedWithEnvironment() {
RuntimeException failure = new RuntimeException();
analyzeAndReport(failure, BasicFailureAnalyzer.class, EnvironmentConstructorFailureAnalyzer.class);
then(failureAnalyzer).should(times(2)).analyze(failure);
}
@Test
void analyzerThatFailsDuringInitializationDoesNotPreventOtherAnalyzersFromBeingCalled() {
RuntimeException failure = new RuntimeException();
analyzeAndReport(failure, BrokenInitializationFailureAnalyzer.class, BasicFailureAnalyzer.class);
then(failureAnalyzer).should().analyze(failure);
}
@Test
void analyzerThatFailsDuringAnalysisDoesNotPreventOtherAnalyzersFromBeingCalled() {
RuntimeException failure = new RuntimeException();
analyzeAndReport(failure, BrokenAnalysisFailureAnalyzer.class, BasicFailureAnalyzer.class);
then(failureAnalyzer).should().analyze(failure);
}
@SafeVarargs
private void analyzeAndReport(Throwable failure, Class<? extends FailureAnalyzer>... failureAnalyzerClasses) {
analyzeAndReport(failure, this.context, failureAnalyzerClasses);
}
@SafeVarargs
private void analyzeAndReport(Throwable failure, AnnotationConfigApplicationContext context,
Class<? extends FailureAnalyzer>... failureAnalyzerClasses) {
MockSpringFactoriesLoader loader = new MockSpringFactoriesLoader();
for (Class<? extends FailureAnalyzer> failureAnalyzerClass : failureAnalyzerClasses) {
loader.add(FailureAnalyzer.class, failureAnalyzerClass);
}
new FailureAnalyzers(context, loader).reportException(failure);
}
static class BasicFailureAnalyzer implements FailureAnalyzer {
@Override
public @Nullable FailureAnalysis analyze(Throwable failure) {
return failureAnalyzer.analyze(failure);
}
}
@SuppressWarnings("NullAway") // Intentional NullPointerException
static class BrokenInitializationFailureAnalyzer implements FailureAnalyzer {
static {
Object foo = null;
foo.toString();
}
@Override
public FailureAnalysis analyze(Throwable failure) {
return null;
}
}
static class BrokenAnalysisFailureAnalyzer implements FailureAnalyzer {
@Override
public FailureAnalysis analyze(Throwable failure) {
throw new NoClassDefFoundError();
}
}
static class BeanFactoryConstructorFailureAnalyzer extends BasicFailureAnalyzer {
BeanFactoryConstructorFailureAnalyzer(BeanFactory beanFactory) {
assertThat(beanFactory).isNotNull();
}
}
static class EnvironmentConstructorFailureAnalyzer extends BasicFailureAnalyzer {
EnvironmentConstructorFailureAnalyzer(Environment environment) {
assertThat(environment).isNotNull();
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free