From abdad1cabe5f59f0e45f83881b9242fcae85fffa Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 19 Oct 2023 20:17:26 -0700 Subject: [PATCH] Constently use assertThatExceptionOf... assertions Closes gh-37964 --- .../mavenplugin/PluginXmlParserTests.java | 8 ++-- ...ibernateMetricsAutoConfigurationTests.java | 6 +-- .../GraphQlMetricsInstrumentationTests.java | 6 +-- .../MetricsWebClientFilterFunctionTests.java | 16 ++++---- .../CassandraAutoConfigurationTests.java | 10 +++-- ...asswordAuthenticationIntegrationTests.java | 8 ++-- ...opertiesEnvironmentPostProcessorTests.java | 12 +++--- .../JacksonAutoConfigurationTests.java | 10 ++--- .../EmbeddedMongoAutoConfigurationTests.java | 9 +++-- .../context/runner/ContextConsumerTests.java | 6 +-- .../tasks/buildinfo/BuildInfoTests.java | 6 +-- .../SpringApplicationShutdownHookTests.java | 7 ++-- .../BufferingApplicationStartupTests.java | 14 ++++--- ...aSourceScriptDatabaseInitializerTests.java | 4 +- ...ceMessageInterpolatorIntegrationTests.java | 6 +-- ...AbstractReactiveWebServerFactoryTests.java | 9 +++-- .../web/server/PrivateKeyParserTests.java | 37 +++++++++---------- .../SslConfigurationValidatorTests.java | 14 +++---- .../AbstractServletWebServerFactoryTests.java | 4 +- .../test/web/UserVehicleControllerTests.java | 6 +-- 20 files changed, 103 insertions(+), 95 deletions(-) diff --git a/buildSrc/src/test/java/org/springframework/boot/build/mavenplugin/PluginXmlParserTests.java b/buildSrc/src/test/java/org/springframework/boot/build/mavenplugin/PluginXmlParserTests.java index 788dc7222dc..41b73c62087 100644 --- a/buildSrc/src/test/java/org/springframework/boot/build/mavenplugin/PluginXmlParserTests.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/mavenplugin/PluginXmlParserTests.java @@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.build.mavenplugin.PluginXmlParser.Plugin; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Tests for {@link PluginXmlParser}. @@ -50,9 +50,9 @@ class PluginXmlParserTests { @Test void parseNonExistingFileThrowException() { - assertThatThrownBy(() -> this.parser.parse(new File("src/test/resources/nonexistent.xml"))) - .isInstanceOf(RuntimeException.class) - .hasCauseInstanceOf(FileNotFoundException.class); + assertThatExceptionOfType(RuntimeException.class) + .isThrownBy(() -> this.parser.parse(new File("src/test/resources/nonexistent.xml"))) + .withCauseInstanceOf(FileNotFoundException.class); } } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfigurationTests.java index 40ba974dc9b..b09ef762099 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfigurationTests.java @@ -50,7 +50,7 @@ import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -117,8 +117,8 @@ class HibernateMetricsAutoConfigurationTests { .withUserConfiguration(NonHibernateEntityManagerFactoryConfiguration.class) .run((context) -> { // ensure EntityManagerFactory is not a Hibernate SessionFactory - assertThatThrownBy(() -> context.getBean(EntityManagerFactory.class).unwrap(SessionFactory.class)) - .isInstanceOf(PersistenceException.class); + assertThatExceptionOfType(PersistenceException.class) + .isThrownBy(() -> context.getBean(EntityManagerFactory.class).unwrap(SessionFactory.class)); MeterRegistry registry = context.getBean(MeterRegistry.class); assertThat(registry.find("hibernate.statements").meter()).isNull(); }); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/graphql/GraphQlMetricsInstrumentationTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/graphql/GraphQlMetricsInstrumentationTests.java index e66dd5e5044..025d6ee3dd8 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/graphql/GraphQlMetricsInstrumentationTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/graphql/GraphQlMetricsInstrumentationTests.java @@ -43,7 +43,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.metrics.AutoTimer; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -143,11 +143,9 @@ class GraphQlMetricsInstrumentationTests { DataFetcher> dataFetcher = mock(DataFetcher.class); given(dataFetcher.get(any())).willThrow(new IllegalStateException("test")); InstrumentationFieldFetchParameters fieldFetchParameters = mockFieldFetchParameters(false); - DataFetcher instrumented = this.instrumentation.instrumentDataFetcher(dataFetcher, fieldFetchParameters); DataFetchingEnvironment environment = DataFetchingEnvironmentImpl.newDataFetchingEnvironment().build(); - assertThatThrownBy(() -> instrumented.get(environment)).isInstanceOf(IllegalStateException.class); - + assertThatIllegalArgumentException().isThrownBy(() -> instrumented.get(environment)); Timer timer = this.registry.find("graphql.datafetcher").timer(); assertThat(timer).isNotNull(); assertThat(timer.count()).isEqualTo(1); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/web/reactive/client/MetricsWebClientFilterFunctionTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/web/reactive/client/MetricsWebClientFilterFunctionTests.java index 88e6447eed9..edaa91ca20f 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/web/reactive/client/MetricsWebClientFilterFunctionTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/web/reactive/client/MetricsWebClientFilterFunctionTests.java @@ -43,7 +43,7 @@ import org.springframework.web.reactive.function.client.ExchangeFunction; import org.springframework.web.reactive.function.client.WebClient; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -145,9 +145,10 @@ class MetricsWebClientFilterFunctionTests { .tags("method", "GET", "uri", "/projects/spring-boot", "status", "CLIENT_ERROR") .timer() .count()).isEqualTo(1); - assertThatThrownBy(() -> this.registry.get("http.client.requests") - .tags("method", "GET", "uri", "/projects/spring-boot", "status", "200") - .timer()).isInstanceOf(MeterNotFoundException.class); + assertThatExceptionOfType(MeterNotFoundException.class) + .isThrownBy(() -> this.registry.get("http.client.requests") + .tags("method", "GET", "uri", "/projects/spring-boot", "status", "200") + .timer()); } @Test @@ -162,9 +163,10 @@ class MetricsWebClientFilterFunctionTests { .tags("method", "GET", "uri", "/projects/spring-boot", "status", "200") .timer() .count()).isEqualTo(1); - assertThatThrownBy(() -> this.registry.get("http.client.requests") - .tags("method", "GET", "uri", "/projects/spring-boot", "status", "CLIENT_ERROR") - .timer()).isInstanceOf(MeterNotFoundException.class); + assertThatExceptionOfType(MeterNotFoundException.class) + .isThrownBy(() -> this.registry.get("http.client.requests") + .tags("method", "GET", "uri", "/projects/spring-boot", "status", "CLIENT_ERROR") + .timer()); } @Test diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationTests.java index a94395cfeaf..5b7444ad4e3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationTests.java @@ -31,13 +31,14 @@ import com.datastax.oss.driver.internal.core.session.throttling.PassThroughReque import com.datastax.oss.driver.internal.core.session.throttling.RateLimitingRequestThrottler; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Tests for {@link CassandraAutoConfiguration} @@ -217,9 +218,10 @@ class CassandraAutoConfigurationTests { @Test void driverConfigLoaderWithRateLimitingRequiresExtraConfiguration() { this.contextRunner.withPropertyValues("spring.data.cassandra.request.throttler.type=rate-limiting") - .run((context) -> assertThatThrownBy(() -> context.getBean(CqlSession.class)) - .hasMessageContaining("Error instantiating class RateLimitingRequestThrottler") - .hasMessageContaining("No configuration setting found for key")); + .run((context) -> assertThatExceptionOfType(BeanCreationException.class) + .isThrownBy(() -> context.getBean(CqlSession.class)) + .withMessageContaining("Error instantiating class RateLimitingRequestThrottler") + .withMessageContaining("No configuration setting found for key")); } @Test diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationWithPasswordAuthenticationIntegrationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationWithPasswordAuthenticationIntegrationTests.java index ac8bb932baf..c641eba7bd5 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationWithPasswordAuthenticationIntegrationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationWithPasswordAuthenticationIntegrationTests.java @@ -34,13 +34,14 @@ import org.testcontainers.images.builder.Transferable; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; +import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.testsupport.testcontainers.CassandraContainer; import org.springframework.util.StreamUtils; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Tests for {@link CassandraAutoConfiguration} that only uses password authentication. @@ -79,8 +80,9 @@ class CassandraAutoConfigurationWithPasswordAuthenticationIntegrationTests { this.contextRunner .withPropertyValues("spring.data.cassandra.username=not-a-user", "spring.data.cassandra.password=invalid-password") - .run((context) -> assertThatThrownBy(() -> context.getBean(CqlSession.class)) - .hasMessageContaining("Authentication error")); + .run((context) -> assertThatExceptionOfType(BeanCreationException.class) + .isThrownBy(() -> context.getBean(CqlSession.class)) + .withMessageContaining("Authentication error")); } static final class PasswordAuthenticatorCassandraContainer extends CassandraContainer { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationPropertiesEnvironmentPostProcessorTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationPropertiesEnvironmentPostProcessorTests.java index 292163108e8..e50de0fd60e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationPropertiesEnvironmentPostProcessorTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationPropertiesEnvironmentPostProcessorTests.java @@ -34,7 +34,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.mockito.Mockito.mock; /** @@ -69,11 +69,11 @@ class IntegrationPropertiesEnvironmentPostProcessorTests { void registerIntegrationPropertiesPropertySourceWithUnknownResourceThrowsException() { ConfigurableEnvironment environment = new StandardEnvironment(); ClassPathResource unknown = new ClassPathResource("does-not-exist.properties", getClass()); - assertThatThrownBy(() -> new IntegrationPropertiesEnvironmentPostProcessor() - .registerIntegrationPropertiesPropertySource(environment, unknown)) - .isInstanceOf(IllegalStateException.class) - .hasCauseInstanceOf(FileNotFoundException.class) - .hasMessageContaining(unknown.toString()); + assertThatIllegalStateException() + .isThrownBy(() -> new IntegrationPropertiesEnvironmentPostProcessor() + .registerIntegrationPropertiesPropertySource(environment, unknown)) + .withCauseInstanceOf(FileNotFoundException.class) + .withMessageContaining(unknown.toString()); } @Test diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java index f6c5f149b25..04e0b0dfb79 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java @@ -64,7 +64,7 @@ import org.springframework.context.annotation.Primary; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.mockito.Mockito.mock; /** @@ -328,10 +328,10 @@ class JacksonAutoConfigurationTests { void disableDefaultLeniency() { this.contextRunner.withPropertyValues("spring.jackson.default-leniency:false").run((context) -> { ObjectMapper mapper = context.getBean(ObjectMapper.class); - assertThatThrownBy(() -> mapper.readValue("{\"birthDate\": \"2010-12-30\"}", Person.class)) - .isInstanceOf(InvalidFormatException.class) - .hasMessageContaining("expected format") - .hasMessageContaining("yyyyMMdd"); + assertThatExceptionOfType(InvalidFormatException.class) + .isThrownBy(() -> mapper.readValue("{\"birthDate\": \"2010-12-30\"}", Person.class)) + .withMessageContaining("expected format") + .withMessageContaining("yyyyMMdd"); }); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfigurationTests.java index 7e9de209823..9203df1cc70 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfigurationTests.java @@ -36,6 +36,7 @@ import org.junit.jupiter.api.condition.OS; import org.junit.jupiter.api.io.TempDir; import org.springframework.beans.DirectFieldAccessor; +import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; @@ -51,7 +52,7 @@ import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.util.FileSystemUtils; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Tests for {@link EmbeddedMongoAutoConfiguration}. @@ -82,8 +83,10 @@ class EmbeddedMongoAutoConfigurationTests { TestPropertyValues.of("spring.data.mongodb.port=0").applyTo(this.context); this.context.register(MongoAutoConfiguration.class, MongoDataAutoConfiguration.class, EmbeddedMongoAutoConfiguration.class); - assertThatThrownBy(() -> this.context.refresh()).hasRootCauseExactlyInstanceOf(IllegalStateException.class) - .hasRootCauseMessage("Set the spring.mongodb.embedded.version property or define your own MongodConfig " + assertThatExceptionOfType(BeanCreationException.class).isThrownBy(() -> this.context.refresh()) + .withRootCauseExactlyInstanceOf(IllegalStateException.class) + .havingRootCause() + .withMessage("Set the spring.mongodb.embedded.version property or define your own MongodConfig " + "bean to use embedded MongoDB"); } diff --git a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/runner/ContextConsumerTests.java b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/runner/ContextConsumerTests.java index dc3bdb1138a..370e9d72f85 100644 --- a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/runner/ContextConsumerTests.java +++ b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/runner/ContextConsumerTests.java @@ -24,8 +24,8 @@ import org.mockito.InOrder; import org.springframework.context.ApplicationContext; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.inOrder; @@ -59,8 +59,8 @@ class ContextConsumerTests { given(predicate.test(24)).willReturn(false); ContextConsumer firstConsumer = (context) -> assertThat(predicate.test(42)).isFalse(); ContextConsumer secondConsumer = (context) -> assertThat(predicate.test(24)).isFalse(); - assertThatThrownBy(() -> firstConsumer.andThen(secondConsumer).accept(mock(ApplicationContext.class))) - .isInstanceOf(AssertionError.class); + assertThatExceptionOfType(AssertionError.class) + .isThrownBy(() -> firstConsumer.andThen(secondConsumer).accept(mock(ApplicationContext.class))); then(predicate).should().test(42); then(predicate).shouldHaveNoMoreInteractions(); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java index 09d44d4598e..9622df0c913 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java @@ -33,7 +33,7 @@ import org.springframework.boot.gradle.junit.GradleProjectBuilder; import org.springframework.boot.testsupport.classpath.ClassPathExclusions; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Tests for {@link BuildInfo}. @@ -191,8 +191,8 @@ class BuildInfoTests { void nullAdditionalPropertyProducesInformativeFailure() { BuildInfo task = createTask(createProject("test")); task.getProperties().getAdditional().put("a", null); - assertThatThrownBy(() -> buildInfoProperties(task)) - .hasMessage("Additional property 'a' is illegal as its value is null"); + assertThatExceptionOfType(Throwable.class).isThrownBy(() -> buildInfoProperties(task)) + .withMessage("Additional property 'a' is illegal as its value is null"); } private Project createProject(String projectName) { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationShutdownHookTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationShutdownHookTests.java index 133f5acab82..92fa9fa6fbc 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationShutdownHookTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationShutdownHookTests.java @@ -35,9 +35,9 @@ import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.GenericApplicationContext; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; -import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * Tests for {@link SpringApplicationShutdownHook}. @@ -163,8 +163,7 @@ class SpringApplicationShutdownHookTests { ConfigurableApplicationContext context = new GenericApplicationContext(); shutdownHook.registerApplicationContext(context); context.refresh(); - assertThatThrownBy(() -> shutdownHook.deregisterFailedApplicationContext(context)) - .isInstanceOf(IllegalStateException.class); + assertThatIllegalStateException().isThrownBy(() -> shutdownHook.deregisterFailedApplicationContext(context)); assertThat(shutdownHook.isApplicationContextRegistered(context)).isTrue(); } @@ -174,7 +173,7 @@ class SpringApplicationShutdownHookTests { GenericApplicationContext context = new GenericApplicationContext(); shutdownHook.registerApplicationContext(context); context.registerBean(FailingBean.class); - assertThatThrownBy(context::refresh).isInstanceOf(BeanCreationException.class); + assertThatExceptionOfType(BeanCreationException.class).isThrownBy(context::refresh); assertThat(shutdownHook.isApplicationContextRegistered(context)).isTrue(); shutdownHook.deregisterFailedApplicationContext(context); assertThat(shutdownHook.isApplicationContextRegistered(context)).isFalse(); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/metrics/buffering/BufferingApplicationStartupTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/metrics/buffering/BufferingApplicationStartupTests.java index 24b064b4f97..ce73bbc9f1d 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/metrics/buffering/BufferingApplicationStartupTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/metrics/buffering/BufferingApplicationStartupTests.java @@ -27,7 +27,8 @@ import org.springframework.boot.context.metrics.buffering.StartupTimeline.Timeli import org.springframework.core.metrics.StartupStep; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; /** * Tests for {@link BufferingApplicationStartup}. @@ -86,8 +87,8 @@ class BufferingApplicationStartupTests { void startRecordingShouldFailIfEventsWereRecorded() { BufferingApplicationStartup applicationStartup = new BufferingApplicationStartup(2); applicationStartup.start("first").end(); - assertThatThrownBy(applicationStartup::startRecording).isInstanceOf(IllegalStateException.class) - .hasMessage("Cannot restart recording once steps have been buffered."); + assertThatIllegalStateException().isThrownBy(applicationStartup::startRecording) + .withMessage("Cannot restart recording once steps have been buffered."); } @Test @@ -95,8 +96,8 @@ class BufferingApplicationStartupTests { BufferingApplicationStartup applicationStartup = new BufferingApplicationStartup(2); StartupStep step = applicationStartup.start("first"); step.end(); - assertThatThrownBy(() -> step.tag("name", "value")).isInstanceOf(IllegalStateException.class) - .hasMessage("StartupStep has already ended."); + assertThatIllegalStateException().isThrownBy(() -> step.tag("name", "value")) + .withMessage("StartupStep has already ended."); } @Test @@ -104,7 +105,8 @@ class BufferingApplicationStartupTests { BufferingApplicationStartup applicationStartup = new BufferingApplicationStartup(2); StartupStep step = applicationStartup.start("first"); step.tag("name", "value"); - assertThatThrownBy(() -> step.getTags().iterator().remove()).isInstanceOf(UnsupportedOperationException.class); + assertThatExceptionOfType(UnsupportedOperationException.class) + .isThrownBy(() -> step.getTags().iterator().remove()); } @Test // gh-25792 diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java index 19511e7a705..a723a3de518 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java @@ -34,7 +34,7 @@ import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.jdbc.datasource.init.ScriptStatementFailedException; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Tests for {@link DataSourceScriptDatabaseInitializer}. @@ -82,7 +82,7 @@ class DataSourceScriptDatabaseInitializerTests populator.setContinueOnError(false); } }; - assertThatThrownBy(initializer::initializeDatabase).isInstanceOf(ScriptStatementFailedException.class); + assertThatExceptionOfType(ScriptStatementFailedException.class).isThrownBy(initializer::initializeDatabase); } @Override diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/validation/MessageSourceMessageInterpolatorIntegrationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/validation/MessageSourceMessageInterpolatorIntegrationTests.java index c44082d00a0..bdc132bb9ea 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/validation/MessageSourceMessageInterpolatorIntegrationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/validation/MessageSourceMessageInterpolatorIntegrationTests.java @@ -33,7 +33,7 @@ import org.springframework.context.support.StaticMessageSource; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Integration tests for {@link MessageSourceMessageInterpolator}. @@ -86,8 +86,8 @@ class MessageSourceMessageInterpolatorIntegrationTests { @Test void recursion() { - assertThatThrownBy(() -> validate("recursion")) - .hasStackTraceContaining("Circular reference '{recursion -> middle -> recursion}'"); + assertThatExceptionOfType(Throwable.class).isThrownBy(() -> validate("recursion")) + .withStackTraceContaining("Circular reference '{recursion -> middle -> recursion}'"); } @Test diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java index 78bc32463c3..8e26e7294b3 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java @@ -77,7 +77,7 @@ import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientRequestException; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Base for testing classes that extends {@link AbstractReactiveWebServerFactory}. @@ -210,7 +210,8 @@ public abstract class AbstractReactiveWebServerFactoryTests { } protected void assertThatSslWithInvalidAliasCallFails(ThrowingCallable call) { - assertThatThrownBy(call).hasStackTraceContaining("Keystore does not contain specified alias 'test-alias-404'"); + assertThatExceptionOfType(Exception.class).isThrownBy(call) + .withStackTraceContaining("Keystore does not contain specified alias 'test-alias-404'"); } protected ReactorClientHttpConnector buildTrustAllSslConnector() { @@ -399,8 +400,8 @@ public abstract class AbstractReactiveWebServerFactoryTests { @Test void whenSslIsEnabledAndNoKeyStoreIsConfiguredThenServerFailsToStart() { - assertThatThrownBy(() -> testBasicSslWithKeyStore(null, null)) - .hasMessageContaining("Could not load key store 'null'"); + assertThatExceptionOfType(Exception.class).isThrownBy(() -> testBasicSslWithKeyStore(null, null)) + .withMessageContaining("Could not load key store 'null'"); } @Test diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/PrivateKeyParserTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/PrivateKeyParserTests.java index a01dec665e2..dc645407e44 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/PrivateKeyParserTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/PrivateKeyParserTests.java @@ -28,7 +28,6 @@ import org.junit.jupiter.params.provider.ValueSource; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; -import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * Tests for {@link PrivateKeyParser}. @@ -75,12 +74,12 @@ class PrivateKeyParserTests { }) // @formatter:on void shouldNotParseUnsupportedTraditionalPkcs1(String file) { - assertThatThrownBy(() -> PrivateKeyParser.parse("classpath:org/springframework/boot/web/server/pkcs1/" + file)) - .isInstanceOf(IllegalStateException.class) - .hasMessageContaining("Error loading private key file") - .hasCauseInstanceOf(IllegalStateException.class) - .getCause() - .hasMessageContaining("Unrecognized private key format"); + assertThatIllegalStateException() + .isThrownBy(() -> PrivateKeyParser.parse("classpath:org/springframework/boot/web/server/pkcs1/" + file)) + .withMessageContaining("Error loading private key file") + .withCauseInstanceOf(IllegalStateException.class) + .havingCause() + .withMessageContaining("Unrecognized private key format"); } @ParameterizedTest @@ -118,12 +117,12 @@ class PrivateKeyParserTests { }) // @formatter:on void shouldNotParseUnsupportedEcPkcs8(String file) { - assertThatThrownBy(() -> PrivateKeyParser.parse("classpath:org/springframework/boot/web/server/pkcs8/" + file)) - .isInstanceOf(IllegalStateException.class) - .hasMessageContaining("Error loading private key file") - .hasCauseInstanceOf(IllegalStateException.class) - .getCause() - .hasMessageContaining("Unrecognized private key format"); + assertThatIllegalStateException() + .isThrownBy(() -> PrivateKeyParser.parse("classpath:org/springframework/boot/web/server/pkcs8/" + file)) + .withMessageContaining("Error loading private key file") + .withCauseInstanceOf(IllegalStateException.class) + .havingCause() + .withMessageContaining("Unrecognized private key format"); } @EnabledForJreRange(min = JRE.JAVA_17, disabledReason = "EdDSA is only supported since Java 17") @@ -191,12 +190,12 @@ class PrivateKeyParserTests { }) // @formatter:on void shouldNotParseUnsupportedEcSec1(String file) { - assertThatThrownBy(() -> PrivateKeyParser.parse("classpath:org/springframework/boot/web/server/sec1/" + file)) - .isInstanceOf(IllegalStateException.class) - .hasMessageContaining("Error loading private key file") - .hasCauseInstanceOf(IllegalStateException.class) - .getCause() - .hasMessageContaining("Unrecognized private key format"); + assertThatIllegalStateException() + .isThrownBy(() -> PrivateKeyParser.parse("classpath:org/springframework/boot/web/server/sec1/" + file)) + .withMessageContaining("Error loading private key file") + .withCauseInstanceOf(IllegalStateException.class) + .havingCause() + .withMessageContaining("Unrecognized private key format"); } @Test diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/SslConfigurationValidatorTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/SslConfigurationValidatorTests.java index 95672ce2d94..3ffed8bc198 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/SslConfigurationValidatorTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/SslConfigurationValidatorTests.java @@ -24,7 +24,7 @@ import java.security.KeyStoreException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; /** * Tests for {@link SslConfigurationValidator}. @@ -65,17 +65,17 @@ class SslConfigurationValidatorTests { @Test void validateKeyAliasWhenAliasNotFoundShouldThrowException() { - assertThatThrownBy(() -> SslConfigurationValidator.validateKeyAlias(this.keyStore, INVALID_ALIAS)) - .isInstanceOf(IllegalStateException.class) - .hasMessage("Keystore does not contain specified alias '" + INVALID_ALIAS + "'"); + assertThatIllegalStateException() + .isThrownBy(() -> SslConfigurationValidator.validateKeyAlias(this.keyStore, INVALID_ALIAS)) + .withMessage("Keystore does not contain specified alias '" + INVALID_ALIAS + "'"); } @Test void validateKeyAliasWhenKeyStoreThrowsExceptionOnContains() throws KeyStoreException { KeyStore uninitializedKeyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - assertThatThrownBy(() -> SslConfigurationValidator.validateKeyAlias(uninitializedKeyStore, "alias")) - .isInstanceOf(IllegalStateException.class) - .hasMessage("Could not determine if keystore contains alias 'alias'"); + assertThatIllegalStateException() + .isThrownBy(() -> SslConfigurationValidator.validateKeyAlias(uninitializedKeyStore, "alias")) + .withMessage("Could not determine if keystore contains alias 'alias'"); } } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java index ee4f802a618..20f2eb239f9 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java @@ -148,7 +148,6 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.assertj.core.api.Assertions.assertThatIOException; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; @@ -482,7 +481,8 @@ public abstract class AbstractServletWebServerFactoryTests { } protected void assertThatSslWithInvalidAliasCallFails(ThrowingCallable call) { - assertThatThrownBy(call).hasStackTraceContaining("Keystore does not contain specified alias 'test-alias-404'"); + assertThatExceptionOfType(Exception.class).isThrownBy(call) + .withStackTraceContaining("Keystore does not contain specified alias 'test-alias-404'"); } @Test diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/src/test/java/smoketest/test/web/UserVehicleControllerTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/src/test/java/smoketest/test/web/UserVehicleControllerTests.java index e3f2840e3eb..2db1475ad5b 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/src/test/java/smoketest/test/web/UserVehicleControllerTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/src/test/java/smoketest/test/web/UserVehicleControllerTests.java @@ -16,7 +16,6 @@ package smoketest.test.web; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import smoketest.test.WelcomeCommandLineRunner; import smoketest.test.domain.VehicleIdentificationNumber; @@ -31,6 +30,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.hamcrest.Matchers.containsString; import static org.mockito.BDDMockito.given; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -96,8 +96,8 @@ class UserVehicleControllerTests { @Test void welcomeCommandLineRunnerShouldNotBeAvailable() { // Since we're a @WebMvcTest WelcomeCommandLineRunner should not be available. - Assertions.assertThatThrownBy(() -> this.applicationContext.getBean(WelcomeCommandLineRunner.class)) - .isInstanceOf(NoSuchBeanDefinitionException.class); + assertThatExceptionOfType(NoSuchBeanDefinitionException.class) + .isThrownBy(() -> this.applicationContext.getBean(WelcomeCommandLineRunner.class)); } }