@Target(value={TYPE,FIELD})
@Retention(value=RUNTIME)
@Documented
@Repeatable(value=SpykBeans.class)
public @interface SpykBean
ApplicationContext. Can be used as a class level annotation or on fields in
either @Configuration classes, or test classes that are
run with 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 @SpykBean 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)
class ExampleTests {
@SpykBean
private lateinit var service: ExampleService;
@Autowired
private lateinit var userOfService UserOfService;
@Test
fun testUserOfService() {
val actual = userOfService.makeUse()
assertThat(actual).isEqualTo("Was: Hello")
verify { service.greet() }
}
@Configuration
@Import(UserOfService::class) // A @Component injected with ExampleService
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 {
@SpykBean
@Qualifier("example")
private lateinit var service: ExampleService
...
}
This annotation is @Repeatable and may be specified multiple times when working
with Java 8 or contained within a @SpykBeans annotation.
MockkPostProcessor| Modifier and Type | Optional Element and Description |
|---|---|
java.lang.Class<?>[] |
classes
The classes to spy.
|
com.ninjasquad.springmockk.MockkClear |
clear
The reset mode to apply to the spied bean.
|
java.lang.String |
name
The name of the bean to spy.
|
java.lang.Class<?>[] |
value
The classes to spy.
|
public abstract java.lang.String name
@AliasFor(value="value") public abstract java.lang.Class<?>[] classes
When @SpykBean also defines a name this attribute can only contain a
single value.
If this is the only specified attribute consider using the value alias
instead.