Skip to content

Commit b9438be

Browse files
bernie-schelberg-invicarasnicoll
authored andcommitted
Consider properties on outer class in nested @DataJpaTest tests
See gh-44348 Signed-off-by: Bernie Schelberg <[email protected]>
1 parent acfdd11 commit b9438be

File tree

2 files changed

+63
-6
lines changed

2 files changed

+63
-6
lines changed

spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/DataJpaTestContextBootstrapper.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
package org.springframework.boot.test.autoconfigure.orm.jpa;
1818

1919
import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;
20-
import org.springframework.core.annotation.MergedAnnotations;
21-
import org.springframework.core.annotation.MergedAnnotations.SearchStrategy;
20+
import org.springframework.test.context.TestContextAnnotationUtils;
2221
import org.springframework.test.context.TestContextBootstrapper;
2322

2423
/**
@@ -30,10 +29,8 @@ class DataJpaTestContextBootstrapper extends SpringBootTestContextBootstrapper {
3029

3130
@Override
3231
protected String[] getProperties(Class<?> testClass) {
33-
return MergedAnnotations.from(testClass, SearchStrategy.INHERITED_ANNOTATIONS)
34-
.get(DataJpaTest.class)
35-
.getValue("properties", String[].class)
36-
.orElse(null);
32+
DataJpaTest dataJpaTest = TestContextAnnotationUtils.findMergedAnnotation(testClass, DataJpaTest.class);
33+
return (dataJpaTest != null) ? dataJpaTest.properties() : null;
3734
}
3835

3936
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* Copyright 2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.test.autoconfigure.data.jpa;
18+
19+
import org.junit.jupiter.api.Nested;
20+
import org.junit.jupiter.api.Test;
21+
22+
import org.springframework.beans.factory.annotation.Autowired;
23+
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
24+
import org.springframework.core.env.Environment;
25+
26+
import static org.assertj.core.api.Assertions.assertThat;
27+
28+
/**
29+
* Tests for the {@link DataJpaTest#properties properties} attribute of
30+
* {@link DataJpaTest @DataJpaTest}.
31+
*
32+
* @author Bernie Schelberg
33+
*/
34+
@DataJpaTest(properties = "spring.profiles.active=test")
35+
class DataJpaTestPropertiesIntegrationTests {
36+
37+
@Autowired
38+
private Environment environment;
39+
40+
@Test
41+
void environmentWithNewProfile() {
42+
assertThat(this.environment.getActiveProfiles()).containsExactly("test");
43+
}
44+
45+
@Nested
46+
class NestedTests {
47+
48+
@Autowired
49+
private Environment innerEnvironment;
50+
51+
@Test
52+
void propertiesFromEnclosingClassAffectNestedTests() {
53+
assertThat(DataJpaTestPropertiesIntegrationTests.this.environment.getActiveProfiles())
54+
.containsExactly("test");
55+
assertThat(this.innerEnvironment.getActiveProfiles()).containsExactly("test");
56+
}
57+
58+
}
59+
60+
}

0 commit comments

Comments
 (0)