Document visibility requirements for Bean Overrides

This commit makes it clear that there are no visibility requirements
for @⁠TestBean fields or factory methods as well as @⁠MockitoBean or
@⁠MockitoSpyBean fields.

Closes gh-33923
This commit is contained in:
Sam Brannen 2024-11-20 16:45:18 +01:00
parent 3569cfe990
commit 7a6e401d17
5 changed files with 40 additions and 8 deletions

View File

@ -52,6 +52,15 @@ When using `@MockitoSpyBean` to create a spy for a `FactoryBean`, a spy will be
for the object created by the `FactoryBean`, not for the `FactoryBean` itself.
====
[NOTE]
====
There are no restrictions on the visibility of `@MockitoBean` and `@MockitoSpyBean`
fields.
Such fields can therefore be `public`, `protected`, package-private (default visibility),
or `private` depending on the needs or coding practices of the project.
====
The following example shows how to use the default behavior of the `@MockitoBean` annotation:
[tabs]
@ -62,7 +71,7 @@ Java::
----
class OverrideBeanTests {
@MockitoBean // <1>
private CustomService customService;
CustomService customService;
// test case body...
}
@ -86,7 +95,7 @@ Java::
----
class OverrideBeanTests {
@MockitoBean("service") // <1>
private CustomService customService;
CustomService customService;
// test case body...
@ -107,7 +116,7 @@ Java::
----
class OverrideBeanTests {
@MockitoSpyBean // <1>
private CustomService customService;
CustomService customService;
// test case body...
}
@ -130,7 +139,7 @@ Java::
----
class OverrideBeanTests {
@MockitoSpyBean("service") // <1>
private CustomService customService;
CustomService customService;
// test case body...

View File

@ -30,6 +30,14 @@ same bean in several tests, make sure to name the field consistently to avoid cr
unnecessary contexts.
====
[NOTE]
====
There are no restrictions on the visibility of `@TestBean` fields or factory methods.
Such fields and methods can therefore be `public`, `protected`, package-private (default
visibility), or `private` depending on the needs or coding practices of the project.
====
The following example shows how to use the default behavior of the `@TestBean` annotation:
[tabs]
@ -40,11 +48,11 @@ Java::
----
class OverrideBeanTests {
@TestBean // <1>
private CustomService customService;
CustomService customService;
// test case body...
private static CustomService customService() { // <2>
static CustomService customService() { // <2>
return new MyFakeCustomService();
}
}
@ -68,11 +76,11 @@ Java::
----
class OverrideBeanTests {
@TestBean(name = "service", methodName = "createCustomService") // <1>
private CustomService customService;
CustomService customService;
// test case body...
private static CustomService createCustomService() { // <2>
static CustomService createCustomService() { // <2>
return new MyFakeCustomService();
}
}

View File

@ -105,6 +105,11 @@ import org.springframework.test.context.bean.override.BeanOverride;
* FactoryBean}, the {@code FactoryBean} will be replaced with a singleton bean
* corresponding to the value returned from the {@code @TestBean} factory method.
*
* <p>There are no restrictions on the visibility of {@code @TestBean} fields or
* factory methods. Such fields and methods can therefore be {@code public},
* {@code protected}, package-private (default visibility), or {@code private}
* depending on the needs or coding practices of the project.
*
* @author Simon Baslé
* @author Stephane Nicoll
* @author Sam Brannen

View File

@ -58,6 +58,11 @@ import org.springframework.test.context.bean.override.BeanOverride;
* FactoryBean}, the {@code FactoryBean} will be replaced with a singleton mock
* of the type of object created by the {@code FactoryBean}.
*
* <p>There are no restrictions on the visibility of a {@code @MockitoBean} field.
* Such fields can therefore be {@code public}, {@code protected}, package-private
* (default visibility), or {@code private} depending on the needs or coding
* practices of the project.
*
* @author Simon Baslé
* @author Sam Brannen
* @since 6.2

View File

@ -51,6 +51,11 @@ import org.springframework.test.context.bean.override.BeanOverride;
* a spy will be created for the object created by the {@code FactoryBean}, not
* for the {@code FactoryBean} itself.
*
* <p>There are no restrictions on the visibility of a {@code @MockitoSpyBean} field.
* Such fields can therefore be {@code public}, {@code protected}, package-private
* (default visibility), or {@code private} depending on the needs or coding
* practices of the project.
*
* @author Simon Baslé
* @author Sam Brannen
* @since 6.2