NoSuchMethodFailureAnalyzerTests Class — spring-boot Architecture
Architecture documentation for the NoSuchMethodFailureAnalyzerTests class in NoSuchMethodFailureAnalyzerTests.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/NoSuchMethodFailureAnalyzerTests.java lines 39–127
@ClassPathOverrides({ "org.springframework:spring-core:5.3.12",
"org.springframework.data:spring-data-relational:1.1.7.RELEASE",
"org.springframework.data:spring-data-r2dbc:3.4.7" })
class NoSuchMethodFailureAnalyzerTests {
@Test
void parseHotspotErrorMessage() {
NoSuchMethodDescriptor descriptor = new NoSuchMethodFailureAnalyzer().getNoSuchMethodDescriptor(
"'boolean org.springframework.util.MimeType.isMoreSpecific(org.springframework.util.MimeType)'");
assertThat(descriptor).isNotNull();
assertThat(descriptor.getErrorMessage())
.isEqualTo("'boolean org.springframework.util.MimeType.isMoreSpecific(org.springframework.util.MimeType)'");
assertThat(descriptor.getClassName()).isEqualTo("org.springframework.util.MimeType");
assertThat(descriptor.getCandidateLocations()).hasSizeGreaterThan(1);
List<ClassDescriptor> typeHierarchy = descriptor.getTypeHierarchy();
assertThat(typeHierarchy).hasSize(1);
assertThat(typeHierarchy.get(0).getLocation()).asString().contains("spring-core-5.3.12.jar");
}
@Test
void parseOpenJ9ErrorMessage() {
NoSuchMethodDescriptor descriptor = new NoSuchMethodFailureAnalyzer().getNoSuchMethodDescriptor(
"org/springframework/util/MimeType.isMoreSpecific(Lorg/springframework/util/MimeType;)Z "
+ "(loaded from ...) "
+ "called from class org.springframework.boot.diagnostics.analyzer.NoSuchMethodFailureAnalyzerTests "
+ "(loaded from ... "
+ "by org.springframework.boot.testsupport.classpath.ModifiedClassPathClassLoader@e0ce6310).");
assertThat(descriptor).isNotNull();
assertThat(descriptor.getErrorMessage())
.isEqualTo("org/springframework/util/MimeType.isMoreSpecific(Lorg/springframework/util/MimeType;)Z");
assertThat(descriptor.getClassName()).isEqualTo("org.springframework.util.MimeType");
assertThat(descriptor.getCandidateLocations()).hasSizeGreaterThan(1);
List<ClassDescriptor> typeHierarchy = descriptor.getTypeHierarchy();
assertThat(typeHierarchy).hasSize(1);
assertThat(typeHierarchy.get(0).getLocation()).asString().contains("spring-core-5.3.12.jar");
}
@Test
void whenAMethodOnAClassIsMissingThenNoSuchMethodErrorIsAnalyzed() {
Throwable failure = createFailureForMissingMethod();
FailureAnalysis analysis = new NoSuchMethodFailureAnalyzer().analyze(failure);
assertThat(analysis).isNotNull();
assertThat(analysis.getDescription())
.contains(NoSuchMethodFailureAnalyzerTests.class.getName() + ".createFailureForMissingMethod(")
.contains("isMoreSpecific(")
.contains("calling method's class, " + NoSuchMethodFailureAnalyzerTests.class.getName() + ",")
.contains("called method's class, org.springframework.util.MimeType,");
assertThat(analysis.getAction()).contains(NoSuchMethodFailureAnalyzerTests.class.getName())
.contains("org.springframework.util.MimeType");
}
@Test
void whenAnInheritedMethodIsMissingThenNoSuchMethodErrorIsAnalyzed() {
Throwable failure = createFailureForMissingInheritedMethod();
FailureAnalysis analysis = new NoSuchMethodFailureAnalyzer().analyze(failure);
assertThat(analysis).isNotNull();
assertThat(analysis.getDescription()).contains(R2dbcMappingContext.class.getName() + ".<init>(")
.contains(R2dbcMappingContext.class.getName() + ".setForceQuote(")
.contains("calling method's class, org.springframework.data.r2dbc.mapping.R2dbcMappingContext,")
.contains("called method's class, org.springframework.data.r2dbc.mapping.R2dbcMappingContext,")
.contains(" org.springframework.data.r2dbc.mapping.R2dbcMappingContext")
.contains(" org.springframework.data.relational.core.mapping.RelationalMappingContext")
.contains(" org.springframework.data.mapping.context.AbstractMappingContext");
assertThat(analysis.getAction()).contains("org.springframework.data.r2dbc.mapping.R2dbcMappingContext");
}
@SuppressWarnings("NullAway") // Deliberately trigger exception
private Throwable createFailureForMissingMethod() {
try {
MimeType mimeType = new MimeType("application", "json");
mimeType.isMoreSpecific(null);
throw new AssertionError("Should not be reached");
}
catch (Throwable ex) {
return ex;
}
}
private Throwable createFailureForMissingInheritedMethod() {
try {
new R2dbcMappingContext();
throw new AssertionError("Should not be reached");
}
catch (Throwable ex) {
return ex;
}
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free