Polish Bean Override internals and tests
This commit is contained in:
@@ -243,6 +243,8 @@ public abstract class BeanOverrideHandler {
|
|||||||
!Objects.equals(this.strategy, that.strategy)) {
|
!Objects.equals(this.strategy, that.strategy)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// by-name lookup
|
||||||
if (this.beanName != null) {
|
if (this.beanName != null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2024 the original author or authors.
|
* Copyright 2002-2025 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.
|
||||||
@@ -109,8 +109,7 @@ class BeanOverrideRegistry {
|
|||||||
|
|
||||||
void inject(Object target, BeanOverrideHandler handler) {
|
void inject(Object target, BeanOverrideHandler handler) {
|
||||||
String beanName = this.handlerToBeanNameMap.get(handler);
|
String beanName = this.handlerToBeanNameMap.get(handler);
|
||||||
Assert.state(StringUtils.hasLength(beanName),
|
Assert.state(StringUtils.hasLength(beanName), () -> "No bean found for BeanOverrideHandler: " + handler);
|
||||||
() -> "No bean found for BeanOverrideHandler: " + handler);
|
|
||||||
inject(handler.getField(), target, beanName);
|
inject(handler.getField(), target, beanName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2024 the original author or authors.
|
* Copyright 2002-2025 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.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2024 the original author or authors.
|
* Copyright 2002-2025 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.
|
||||||
@@ -395,7 +395,7 @@ class BeanOverrideBeanFactoryPostProcessorTests {
|
|||||||
|
|
||||||
private static AnnotationConfigApplicationContext createContext(Class<?> testClass) {
|
private static AnnotationConfigApplicationContext createContext(Class<?> testClass) {
|
||||||
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
|
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
|
||||||
Set<BeanOverrideHandler> handlers = new LinkedHashSet<>(BeanOverrideHandler.forTestClass(testClass));
|
Set<BeanOverrideHandler> handlers = new LinkedHashSet<>(BeanOverrideTestUtils.findHandlers(testClass));
|
||||||
new BeanOverrideContextCustomizer(handlers).customizeContext(context, mock(MergedContextConfiguration.class));
|
new BeanOverrideContextCustomizer(handlers).customizeContext(context, mock(MergedContextConfiguration.class));
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2024 the original author or authors.
|
* Copyright 2002-2025 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.
|
||||||
@@ -51,14 +51,14 @@ class BeanOverrideHandlerTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void forTestClassWithSingleField() {
|
void forTestClassWithSingleField() {
|
||||||
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(SingleAnnotation.class);
|
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(SingleAnnotation.class);
|
||||||
assertThat(handlers).singleElement().satisfies(hasBeanOverrideHandler(
|
assertThat(handlers).singleElement().satisfies(hasBeanOverrideHandler(
|
||||||
field(SingleAnnotation.class, "message"), String.class, null));
|
field(SingleAnnotation.class, "message"), String.class, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void forTestClassWithMultipleFields() {
|
void forTestClassWithMultipleFields() {
|
||||||
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(MultipleAnnotations.class);
|
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(MultipleAnnotations.class);
|
||||||
assertThat(handlers).hasSize(2)
|
assertThat(handlers).hasSize(2)
|
||||||
.anySatisfy(hasBeanOverrideHandler(
|
.anySatisfy(hasBeanOverrideHandler(
|
||||||
field(MultipleAnnotations.class, "message"), String.class, null))
|
field(MultipleAnnotations.class, "message"), String.class, null))
|
||||||
@@ -68,7 +68,7 @@ class BeanOverrideHandlerTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void forTestClassWithMultipleFieldsWithIdenticalMetadata() {
|
void forTestClassWithMultipleFieldsWithIdenticalMetadata() {
|
||||||
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(MultipleAnnotationsDuplicate.class);
|
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(MultipleAnnotationsDuplicate.class);
|
||||||
assertThat(handlers).hasSize(2)
|
assertThat(handlers).hasSize(2)
|
||||||
.anySatisfy(hasBeanOverrideHandler(
|
.anySatisfy(hasBeanOverrideHandler(
|
||||||
field(MultipleAnnotationsDuplicate.class, "message1"), String.class, "messageBean"))
|
field(MultipleAnnotationsDuplicate.class, "message1"), String.class, "messageBean"))
|
||||||
@@ -81,7 +81,7 @@ class BeanOverrideHandlerTests {
|
|||||||
void forTestClassWithCompetingBeanOverrideAnnotationsOnSameField() {
|
void forTestClassWithCompetingBeanOverrideAnnotationsOnSameField() {
|
||||||
Field faultyField = field(MultipleAnnotationsOnSameField.class, "message");
|
Field faultyField = field(MultipleAnnotationsOnSameField.class, "message");
|
||||||
assertThatIllegalStateException()
|
assertThatIllegalStateException()
|
||||||
.isThrownBy(() -> BeanOverrideHandler.forTestClass(MultipleAnnotationsOnSameField.class))
|
.isThrownBy(() -> BeanOverrideTestUtils.findHandlers(MultipleAnnotationsOnSameField.class))
|
||||||
.withMessageStartingWith("Multiple @BeanOverride annotations found")
|
.withMessageStartingWith("Multiple @BeanOverride annotations found")
|
||||||
.withMessageContaining(faultyField.toString());
|
.withMessageContaining(faultyField.toString());
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ class BeanOverrideHandlerTests {
|
|||||||
void forTestClassWithStaticBeanOverrideField() {
|
void forTestClassWithStaticBeanOverrideField() {
|
||||||
Field staticField = field(StaticBeanOverrideField.class, "message");
|
Field staticField = field(StaticBeanOverrideField.class, "message");
|
||||||
assertThatIllegalStateException()
|
assertThatIllegalStateException()
|
||||||
.isThrownBy(() -> BeanOverrideHandler.forTestClass(StaticBeanOverrideField.class))
|
.isThrownBy(() -> BeanOverrideTestUtils.findHandlers(StaticBeanOverrideField.class))
|
||||||
.withMessage("@BeanOverride field must not be static: " + staticField);
|
.withMessage("@BeanOverride field must not be static: " + staticField);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2002-2025 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.test.context.bean.override;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test utilities for Bean Overrides.
|
||||||
|
*
|
||||||
|
* @author Sam Brannen
|
||||||
|
* @since 6.2.2
|
||||||
|
*/
|
||||||
|
public abstract class BeanOverrideTestUtils {
|
||||||
|
|
||||||
|
public static List<BeanOverrideHandler> findHandlers(Class<?> testClass) {
|
||||||
|
return BeanOverrideHandler.forTestClass(testClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2024 the original author or authors.
|
* Copyright 2002-2025 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.
|
||||||
@@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
|
|||||||
import org.springframework.core.ResolvableType;
|
import org.springframework.core.ResolvableType;
|
||||||
import org.springframework.test.context.bean.override.BeanOverrideHandler;
|
import org.springframework.test.context.bean.override.BeanOverrideHandler;
|
||||||
import org.springframework.test.context.bean.override.BeanOverrideStrategy;
|
import org.springframework.test.context.bean.override.BeanOverrideStrategy;
|
||||||
|
import org.springframework.test.context.bean.override.BeanOverrideTestUtils;
|
||||||
import org.springframework.util.ReflectionUtils;
|
import org.springframework.util.ReflectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
@@ -42,21 +43,21 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
|||||||
class TestBeanOverrideHandlerTests {
|
class TestBeanOverrideHandlerTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void setsBeanNameToNullIfAnnotationNameIsNull() {
|
void beanNameIsSetToNullIfAnnotationNameIsEmpty() {
|
||||||
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(SampleOneOverride.class);
|
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(SampleOneOverride.class);
|
||||||
assertThat(handlers).singleElement().extracting(BeanOverrideHandler::getBeanName).isNull();
|
assertThat(handlers).singleElement().extracting(BeanOverrideHandler::getBeanName).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void setsBeanNameToAnnotationName() {
|
void beanNameIsSetToAnnotationName() {
|
||||||
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(SampleOneOverrideWithName.class);
|
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(SampleOneOverrideWithName.class);
|
||||||
assertThat(handlers).singleElement().extracting(BeanOverrideHandler::getBeanName).isEqualTo("anotherBean");
|
assertThat(handlers).singleElement().extracting(BeanOverrideHandler::getBeanName).isEqualTo("anotherBean");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void failsWithMissingMethod() {
|
void failsWithMissingMethod() {
|
||||||
assertThatIllegalStateException()
|
assertThatIllegalStateException()
|
||||||
.isThrownBy(() -> BeanOverrideHandler.forTestClass(SampleMissingMethod.class))
|
.isThrownBy(() -> BeanOverrideTestUtils.findHandlers(SampleMissingMethod.class))
|
||||||
.withMessage("No static method found named message() in %s with return type %s",
|
.withMessage("No static method found named message() in %s with return type %s",
|
||||||
SampleMissingMethod.class.getName(), String.class.getName());
|
SampleMissingMethod.class.getName(), String.class.getName());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.mockito.Answers;
|
|||||||
import org.springframework.core.ResolvableType;
|
import org.springframework.core.ResolvableType;
|
||||||
import org.springframework.core.annotation.AnnotatedElementUtils;
|
import org.springframework.core.annotation.AnnotatedElementUtils;
|
||||||
import org.springframework.test.context.bean.override.BeanOverrideHandler;
|
import org.springframework.test.context.bean.override.BeanOverrideHandler;
|
||||||
|
import org.springframework.test.context.bean.override.BeanOverrideTestUtils;
|
||||||
import org.springframework.util.ReflectionUtils;
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
@@ -34,87 +35,89 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
* Tests for {@link MockitoBeanOverrideHandler}.
|
* Tests for {@link MockitoBeanOverrideHandler}.
|
||||||
*
|
*
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
|
* @author Sam Brannen
|
||||||
|
* @since 6.2
|
||||||
*/
|
*/
|
||||||
class MockitoBeanOverrideHandlerTests {
|
class MockitoBeanOverrideHandlerTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void forTestClassSetsNameToNullIfAnnotationNameIsNull() {
|
void beanNameIsSetToNullIfAnnotationNameIsEmpty() {
|
||||||
List<BeanOverrideHandler> list = BeanOverrideHandler.forTestClass(SampleOneMock.class);
|
List<BeanOverrideHandler> list = BeanOverrideTestUtils.findHandlers(SampleOneMock.class);
|
||||||
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isNull());
|
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isNull());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void forTestClassSetsNameToAnnotationName() {
|
void beanNameIsSetToAnnotationName() {
|
||||||
List<BeanOverrideHandler> list = BeanOverrideHandler.forTestClass(SampleOneMockWithName.class);
|
List<BeanOverrideHandler> list = BeanOverrideTestUtils.findHandlers(SampleOneMockWithName.class);
|
||||||
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isEqualTo("anotherService"));
|
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isEqualTo("anotherService"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void isEqualToWithSameInstance() {
|
void isEqualToWithSameInstanceFromField() {
|
||||||
MockitoBeanOverrideHandler handler = createBeanOverrideHandler(sampleField("service"));
|
MockitoBeanOverrideHandler handler = createHandler(sampleField("service"));
|
||||||
assertThat(handler).isEqualTo(handler);
|
assertThat(handler).isEqualTo(handler);
|
||||||
assertThat(handler).hasSameHashCodeAs(handler);
|
assertThat(handler).hasSameHashCodeAs(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void isEqualToWithSameMetadata() {
|
void isEqualToWithSameMetadataFromField() {
|
||||||
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
|
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
|
||||||
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service"));
|
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service"));
|
||||||
assertThat(handler1).isEqualTo(handler2);
|
assertThat(handler1).isEqualTo(handler2);
|
||||||
assertThat(handler1).hasSameHashCodeAs(handler2);
|
assertThat(handler1).hasSameHashCodeAs(handler2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void isNotEqualEqualToByTypeLookupWithSameMetadataButDifferentField() {
|
void isNotEqualEqualToByTypeLookupWithSameMetadataButDifferentField() {
|
||||||
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
|
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
|
||||||
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service2"));
|
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service2"));
|
||||||
assertThat(handler1).isNotEqualTo(handler2);
|
assertThat(handler1).isNotEqualTo(handler2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void isEqualEqualToByNameLookupWithSameMetadataButDifferentField() {
|
void isEqualEqualToByNameLookupWithSameMetadataButDifferentField() {
|
||||||
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service3"));
|
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service3"));
|
||||||
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service4"));
|
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service4"));
|
||||||
assertThat(handler1).isEqualTo(handler2);
|
assertThat(handler1).isEqualTo(handler2);
|
||||||
assertThat(handler1).hasSameHashCodeAs(handler2);
|
assertThat(handler1).hasSameHashCodeAs(handler2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void isNotEqualToWithSameMetadataButDifferentBeanName() {
|
void isNotEqualToWithSameMetadataButDifferentBeanName() {
|
||||||
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
|
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
|
||||||
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service3"));
|
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service3"));
|
||||||
assertThat(handler1).isNotEqualTo(handler2);
|
assertThat(handler1).isNotEqualTo(handler2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void isNotEqualToWithSameMetadataButDifferentExtraInterfaces() {
|
void isNotEqualToWithSameMetadataButDifferentExtraInterfaces() {
|
||||||
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
|
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
|
||||||
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service5"));
|
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service5"));
|
||||||
assertThat(handler1).isNotEqualTo(handler2);
|
assertThat(handler1).isNotEqualTo(handler2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void isNotEqualToWithSameMetadataButDifferentAnswers() {
|
void isNotEqualToWithSameMetadataButDifferentAnswers() {
|
||||||
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
|
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
|
||||||
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service6"));
|
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service6"));
|
||||||
assertThat(handler1).isNotEqualTo(handler2);
|
assertThat(handler1).isNotEqualTo(handler2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void isNotEqualToWithSameMetadataButDifferentSerializableFlag() {
|
void isNotEqualToWithSameMetadataButDifferentSerializableFlag() {
|
||||||
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
|
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
|
||||||
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service7"));
|
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service7"));
|
||||||
assertThat(handler1).isNotEqualTo(handler2);
|
assertThat(handler1).isNotEqualTo(handler2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Field sampleField(String fieldName) {
|
private static Field sampleField(String fieldName) {
|
||||||
Field field = ReflectionUtils.findField(Sample.class, fieldName);
|
Field field = ReflectionUtils.findField(Sample.class, fieldName);
|
||||||
assertThat(field).isNotNull();
|
assertThat(field).isNotNull();
|
||||||
return field;
|
return field;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MockitoBeanOverrideHandler createBeanOverrideHandler(Field field) {
|
private static MockitoBeanOverrideHandler createHandler(Field field) {
|
||||||
MockitoBean annotation = AnnotatedElementUtils.getMergedAnnotation(field, MockitoBean.class);
|
MockitoBean annotation = AnnotatedElementUtils.getMergedAnnotation(field, MockitoBean.class);
|
||||||
return new MockitoBeanOverrideHandler(field, ResolvableType.forClass(field.getType()), annotation);
|
return new MockitoBeanOverrideHandler(field, ResolvableType.forClass(field.getType()), annotation);
|
||||||
}
|
}
|
||||||
@@ -124,14 +127,12 @@ class MockitoBeanOverrideHandlerTests {
|
|||||||
|
|
||||||
@MockitoBean
|
@MockitoBean
|
||||||
String service;
|
String service;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static class SampleOneMockWithName {
|
static class SampleOneMockWithName {
|
||||||
|
|
||||||
@MockitoBean("anotherService")
|
@MockitoBean("anotherService")
|
||||||
String service;
|
String service;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static class Sample {
|
static class Sample {
|
||||||
@@ -156,7 +157,6 @@ class MockitoBeanOverrideHandlerTests {
|
|||||||
|
|
||||||
@MockitoBean(serializable = true)
|
@MockitoBean(serializable = true)
|
||||||
private String service7;
|
private String service7;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2024 the original author or authors.
|
* Copyright 2002-2025 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.
|
||||||
@@ -24,56 +24,60 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.springframework.core.annotation.AnnotationUtils;
|
import org.springframework.core.annotation.AnnotationUtils;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.test.context.bean.override.BeanOverrideHandler;
|
import org.springframework.test.context.bean.override.BeanOverrideHandler;
|
||||||
import org.springframework.test.context.bean.override.example.ExampleService;
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link MockitoBeanOverrideProcessorTests}
|
* Tests for {@link MockitoBeanOverrideProcessor}.
|
||||||
|
*
|
||||||
|
* @author Simon Baslé
|
||||||
|
* @author Sam Brannen
|
||||||
|
* @since 6.2
|
||||||
*/
|
*/
|
||||||
public class MockitoBeanOverrideProcessorTests {
|
class MockitoBeanOverrideProcessorTests {
|
||||||
|
|
||||||
private final MockitoBeanOverrideProcessor processor = new MockitoBeanOverrideProcessor();
|
private final MockitoBeanOverrideProcessor processor = new MockitoBeanOverrideProcessor();
|
||||||
|
|
||||||
|
|
||||||
|
private final Field field = ReflectionUtils.findField(TestCase.class, "number");
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void mockAnnotationCreatesMockitoBeanOverrideHandler() throws NoSuchFieldException {
|
void mockAnnotationCreatesMockitoBeanOverrideHandler() {
|
||||||
MockitoBean annotation = AnnotationUtils.synthesizeAnnotation(MockitoBean.class);
|
MockitoBean annotation = AnnotationUtils.synthesizeAnnotation(MockitoBean.class);
|
||||||
Class<?> clazz = MockitoConf.class;
|
BeanOverrideHandler object = processor.createHandler(annotation, TestCase.class, field);
|
||||||
Field field = clazz.getField("a");
|
|
||||||
BeanOverrideHandler object = this.processor.createHandler(annotation, clazz, field);
|
|
||||||
|
|
||||||
assertThat(object).isExactlyInstanceOf(MockitoBeanOverrideHandler.class);
|
assertThat(object).isExactlyInstanceOf(MockitoBeanOverrideHandler.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void spyAnnotationCreatesMockitoSpyBeanOverrideHandler() throws NoSuchFieldException {
|
void spyAnnotationCreatesMockitoSpyBeanOverrideHandler() {
|
||||||
MockitoSpyBean annotation = AnnotationUtils.synthesizeAnnotation(MockitoSpyBean.class);
|
MockitoSpyBean annotation = AnnotationUtils.synthesizeAnnotation(MockitoSpyBean.class);
|
||||||
Class<?> clazz = MockitoConf.class;
|
BeanOverrideHandler object = processor.createHandler(annotation, TestCase.class, field);
|
||||||
Field field = clazz.getField("a");
|
|
||||||
BeanOverrideHandler object = this.processor.createHandler(annotation, clazz, field);
|
|
||||||
|
|
||||||
assertThat(object).isExactlyInstanceOf(MockitoSpyBeanOverrideHandler.class);
|
assertThat(object).isExactlyInstanceOf(MockitoSpyBeanOverrideHandler.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void otherAnnotationThrows() throws NoSuchFieldException {
|
void otherAnnotationThrows() {
|
||||||
Class<?> clazz = MockitoConf.class;
|
|
||||||
Field field = clazz.getField("a");
|
|
||||||
Annotation annotation = field.getAnnotation(Nullable.class);
|
Annotation annotation = field.getAnnotation(Nullable.class);
|
||||||
|
|
||||||
assertThatIllegalStateException()
|
assertThatIllegalStateException()
|
||||||
.isThrownBy(() -> this.processor.createHandler(annotation, clazz, field))
|
.isThrownBy(() -> processor.createHandler(annotation, TestCase.class, field))
|
||||||
.withMessage("Invalid annotation passed to MockitoBeanOverrideProcessor: expected either " +
|
.withMessage("Invalid annotation passed to MockitoBeanOverrideProcessor: expected either " +
|
||||||
"@MockitoBean or @MockitoSpyBean on field %s.%s", field.getDeclaringClass().getName(),
|
"@MockitoBean or @MockitoSpyBean on field %s.%s", field.getDeclaringClass().getName(),
|
||||||
field.getName());
|
field.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
static class MockitoConf {
|
|
||||||
|
static class TestCase {
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@MockitoBean
|
@MockitoBean
|
||||||
@MockitoSpyBean
|
@MockitoSpyBean
|
||||||
public ExampleService a;
|
Integer number;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2024 the original author or authors.
|
* Copyright 2002-2025 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.
|
||||||
@@ -24,6 +24,7 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.springframework.core.ResolvableType;
|
import org.springframework.core.ResolvableType;
|
||||||
import org.springframework.core.annotation.AnnotatedElementUtils;
|
import org.springframework.core.annotation.AnnotatedElementUtils;
|
||||||
import org.springframework.test.context.bean.override.BeanOverrideHandler;
|
import org.springframework.test.context.bean.override.BeanOverrideHandler;
|
||||||
|
import org.springframework.test.context.bean.override.BeanOverrideTestUtils;
|
||||||
import org.springframework.util.ReflectionUtils;
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
@@ -36,14 +37,14 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
class MockitoSpyBeanOverrideHandlerTests {
|
class MockitoSpyBeanOverrideHandlerTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void forTestClassSetsNameToNullIfAnnotationNameIsNull() {
|
void beanNameIsSetToNullIfAnnotationNameIsEmpty() {
|
||||||
List<BeanOverrideHandler> list = BeanOverrideHandler.forTestClass(SampleOneSpy.class);
|
List<BeanOverrideHandler> list = BeanOverrideTestUtils.findHandlers(SampleOneSpy.class);
|
||||||
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isNull());
|
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isNull());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void forTestClassSetsNameToAnnotationName() {
|
void beanNameIsSetToAnnotationName() {
|
||||||
List<BeanOverrideHandler> list = BeanOverrideHandler.forTestClass(SampleOneSpyWithName.class);
|
List<BeanOverrideHandler> list = BeanOverrideTestUtils.findHandlers(SampleOneSpyWithName.class);
|
||||||
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isEqualTo("anotherService"));
|
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isEqualTo("anotherService"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user