Support ContextLoader config in @⁠SpringJUnit[Web]Config

Prior to this commit, @⁠SpringJUnitConfig and @⁠SpringJUnitWebConfig
did not declare `loader` attributes that alias @⁠ContextConfiguration's
`loader` attribute. Consequently, it was not possible to configure a
custom ContextLoader via those annotations.

The lack of those `loader` attributes was an oversight, and this commit
introduces them to support custom ContextLoader configuration directly
via the @⁠SpringJUnitConfig and @⁠SpringJUnitWebConfig annotations.

Closes gh-31498
This commit is contained in:
Sam Brannen 2023-10-25 16:12:12 +02:00
parent c076f44144
commit 6c4cbd2aab
4 changed files with 24 additions and 6 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2022 the original author or authors. * Copyright 2002-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -28,6 +28,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ApplicationContextInitializer;
import org.springframework.core.annotation.AliasFor; import org.springframework.core.annotation.AliasFor;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.ContextLoader;
/** /**
* {@code @SpringJUnitConfig} is a <em>composed annotation</em> that combines * {@code @SpringJUnitConfig} is a <em>composed annotation</em> that combines
@ -91,6 +92,13 @@ public @interface SpringJUnitConfig {
@AliasFor(annotation = ContextConfiguration.class) @AliasFor(annotation = ContextConfiguration.class)
boolean inheritInitializers() default true; boolean inheritInitializers() default true;
/**
* Alias for {@link ContextConfiguration#loader}.
* @since 6.1
*/
@AliasFor(annotation = ContextConfiguration.class)
Class<? extends ContextLoader> loader() default ContextLoader.class;
/** /**
* Alias for {@link ContextConfiguration#name}. * Alias for {@link ContextConfiguration#name}.
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2022 the original author or authors. * Copyright 2002-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -28,6 +28,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ApplicationContextInitializer;
import org.springframework.core.annotation.AliasFor; import org.springframework.core.annotation.AliasFor;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.ContextLoader;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.context.web.WebAppConfiguration;
@ -96,6 +97,13 @@ public @interface SpringJUnitWebConfig {
@AliasFor(annotation = ContextConfiguration.class) @AliasFor(annotation = ContextConfiguration.class)
boolean inheritInitializers() default true; boolean inheritInitializers() default true;
/**
* Alias for {@link ContextConfiguration#loader}.
* @since 6.1
*/
@AliasFor(annotation = ContextConfiguration.class)
Class<? extends ContextLoader> loader() default ContextLoader.class;
/** /**
* Alias for {@link ContextConfiguration#name}. * Alias for {@link ContextConfiguration#name}.
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2022 the original author or authors. * Copyright 2002-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -27,6 +27,7 @@ import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit.jupiter.comics.Cat; import org.springframework.test.context.junit.jupiter.comics.Cat;
import org.springframework.test.context.junit.jupiter.comics.Dog; import org.springframework.test.context.junit.jupiter.comics.Dog;
import org.springframework.test.context.junit.jupiter.comics.Person; import org.springframework.test.context.junit.jupiter.comics.Person;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -40,7 +41,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* @see SpringExtension * @see SpringExtension
* @see ParameterizedTest * @see ParameterizedTest
*/ */
@SpringJUnitConfig(TestConfig.class) @SpringJUnitConfig(classes = TestConfig.class, loader = AnnotationConfigContextLoader.class)
class SpringExtensionParameterizedTests { class SpringExtensionParameterizedTests {
@ParameterizedTest @ParameterizedTest

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2022 the original author or authors. * Copyright 2002-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -21,6 +21,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.web.AnnotationConfigWebContextLoader;
import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.WebApplicationContext;
@ -49,7 +50,7 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppC
* @see org.springframework.test.context.junit.jupiter.SpringExtensionTests * @see org.springframework.test.context.junit.jupiter.SpringExtensionTests
* @see org.springframework.test.context.junit.jupiter.ComposedSpringExtensionTests * @see org.springframework.test.context.junit.jupiter.ComposedSpringExtensionTests
*/ */
@SpringJUnitWebConfig(WebConfig.class) @SpringJUnitWebConfig(classes = WebConfig.class, loader = AnnotationConfigWebContextLoader.class)
@DisplayName("Web SpringExtension Tests") @DisplayName("Web SpringExtension Tests")
class WebSpringExtensionTests { class WebSpringExtensionTests {