-
Notifications
You must be signed in to change notification settings - Fork 41.6k
Closed
Labels
status: duplicateA duplicate of another issueA duplicate of another issue
Description
Spies created with @SpyBean are not added to the MockitoBeans which are then reset at the end of test execution like Mocks are, rendering them useless for invocation counts.
Compare from org.springframework.boot.test.mock.mockito.MockitoPostProcessor:
private void registerMock(ConfigurableListableBeanFactory beanFactory,
BeanDefinitionRegistry registry, MockDefinition definition, Field field) {
RootBeanDefinition beanDefinition = createBeanDefinition(definition);
String beanName = getBeanName(beanFactory, registry, definition, beanDefinition);
beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(1,
beanName);
if (registry.containsBeanDefinition(beanName)) {
registry.removeBeanDefinition(beanName);
}
registry.registerBeanDefinition(beanName, beanDefinition);
Object mock = createMock(definition, beanName);
beanFactory.registerSingleton(beanName, mock);
this.mockitoBeans.add(mock);
this.beanNameRegistry.put(definition, beanName);
if (field != null) {
this.fieldRegistry.put(field, new RegisteredField(definition, beanName));
}
}and
private void registerSpy(SpyDefinition definition, Field field, String beanName) {
this.spies.put(beanName, definition);
this.beanNameRegistry.put(definition, beanName);
if (field != null) {
this.fieldRegistry.put(field, new RegisteredField(definition, beanName));
}
}You can see for @MockBean that we register the mocks (this.mockitoBeans.add(mock);) but for @SpyBean the mock is never registered, and hence is not reset when the beans contained in the MockitoBeans instance are.
Metadata
Metadata
Assignees
Labels
status: duplicateA duplicate of another issueA duplicate of another issue