@Target(value={TYPE,FIELD})
@Retention(value=RUNTIME)
@Documented
@Repeatable(value=MockkBeans.class)
public @interface MockkBean
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.
Mocks can be registered by type or by bean name. When registered by
type, any existing single bean of a matching type (including subclasses) in the context
will be replaced by the mock. When registered by name, an existing bean can be
specifically targeted for replacement by a mock. In either case, 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 mocked bean will be added to the context
alongside the existing dependency.
When @MockkBean is used on a field, as well as being registered in the
application context, the mock will also be injected into the field. Typical usage might
be:
@RunWith(SpringRunner.class)
class ExampleTests {
@MockkBean
private lateinit var service: ExampleService
@Autowired
private lateinit var userOfService: UserOfService
@Test
void testUserOfService() {
every { service.greet() } returns "Hello"
val actual = userOfService.makeUse()
assertThat(actual).isEqualTo("Was: Hello")
}
@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)
class ExampleTests {
@MockkBean
@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 an @MockkBeans annotation.
MockkPostProcessor| Modifier and Type | Optional Element and Description |
|---|---|
java.lang.Class<?>[] |
classes
The classes to mock.
|
com.ninjasquad.springmockk.MockkClear |
clear
The clear mode to apply to the mock bean.
|
java.lang.Class<?>[] |
extraInterfaces
Any extra interfaces that should also be declared on the mock.
|
java.lang.String |
name
The name of the bean to register or replace.
|
boolean |
relaxed
Specifies if the created mock will be relaxed or not
|
boolean |
relaxUnitFun
Specifies if the created mock will have relaxed
Unit-returning functions |
java.lang.Class<?>[] |
value
The classes to mock.
|
public abstract java.lang.String name
@AliasFor(value="value") public abstract java.lang.Class<?>[] classes
When @MockkBean 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.
public abstract java.lang.Class<?>[] extraInterfaces
public abstract com.ninjasquad.springmockk.MockkClear clear
MockkClear.AFTER
meaning that mocks are automatically reset after each test method is invoked.