Annotation Interface SpyBean
ApplicationContext. Can be used as a class level annotation or on fields in
either @Configuration classes, or test classes that are
@RunWith the SpringRunner.
Spies can be applied by type or by bean name. All beans in the context
of a matching type (including subclasses) will be wrapped with the spy. If no existing
bean is defined a new one will be added. Dependencies that are known to the application
context but are not beans (such as those
registered directly) will not be found and a spied bean will be added to the context
alongside the existing dependency.
When @SpyBean is used on a field, as well as being registered in the
application context, the spy will also be injected into the field. Typical usage might
be:
@RunWith(SpringRunner.class)
public class ExampleTests {
@SpyBean
private ExampleService service;
@Autowired
private UserOfService userOfService;
@Test
public void testUserOfService() {
String actual = this.userOfService.makeUse();
assertEquals("Was: Hello", actual);
verify(this.service).greet();
}
@Configuration
@Import(UserOfService.class) // A @Component injected with ExampleService
static class Config {
}
}
If there is more than one bean of the requested type, qualifier metadata must be
specified at field level:
@RunWith(SpringRunner.class)
public class ExampleTests {
@SpyBean
@Qualifier("example")
private ExampleService service;
...
}
This annotation is @Repeatable and may be specified multiple times when working
with Java 8 or contained within a @SpyBeans annotation.
- Since:
- 1.4.0
- Author:
- Phillip Webb
- See Also:
-
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescriptionClass<?>[]The classes to spy.The name of the bean to spy.booleanIndicates that Mockito methods such asverify(mock)should use thetargetof AOP advised beans, rather than the proxy itself.The reset mode to apply to the spied bean.Class<?>[]The classes to spy.
-
Element Details
-
name
String nameThe name of the bean to spy. If not specified the name will either be generated or, if the spy is for an existing bean, the existing name will be used.- Returns:
- the name of the bean
- Default:
- ""
-
value
The classes to spy. This is an alias ofclasses()which can be used for brevity if no other attributes are defined. Seeclasses()for details.- Returns:
- the classes to spy
- Default:
- {}
-
classes
The classes to spy. Each class specified here will result in a spy being applied. Classes can be omitted when the annotation is used on a field.When
@SpyBeanalso defines anamethis attribute can only contain a single value.If this is the only specified attribute consider using the
valuealias instead.- Returns:
- the classes to spy
- Default:
- {}
-
reset
MockReset resetThe reset mode to apply to the spied bean. The default isMockReset.AFTERmeaning that spies are automatically reset after each test method is invoked.- Returns:
- the reset mode
- Default:
- AFTER
-
proxyTargetAware
boolean proxyTargetAwareIndicates that Mockito methods such asverify(mock)should use thetargetof AOP advised beans, rather than the proxy itself. If set tofalseyou may need to use the result ofAopTestUtils.getUltimateTargetObject(...)when calling Mockito methods.- Returns:
trueif the target of AOP advised beans is used orfalseif the proxy is used directly
- Default:
- true
-