Skip to content

Commit 2b6a0be

Browse files
sivaprasadreddyodrotbohm
authored andcommitted
GH-795 - Using @MockitoBean and @MockitoSpyBean.
1 parent 5d57e2c commit 2b6a0be

File tree

12 files changed

+27
-27
lines changed

12 files changed

+27
-27
lines changed

etc/introducing-spring-modulith.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ It can be link:{docs}#testing.bootstrap-modes[tweaked] to explicitly include oth
122122
== Using Events for Inter-module Interaction
123123

124124
Shifting the integration testing focus towards application modules usually reveals their outgoing dependencies, typically established by references to Spring beans residing in other modules.
125-
While those can be mocked (by using `@MockBean`) to satisfy the test execution, it is often a better idea to replace the cross-module bean dependencies with an application event being published and consuming that with the previously explicitly invoked component.
125+
While those can be mocked (by using `@MockitoBean`) to satisfy the test execution, it is often a better idea to replace the cross-module bean dependencies with an application event being published and consuming that with the previously explicitly invoked component.
126126

127127
Our example is already arranged in this preferred way, as it publishes an `OrderCompleted` event during the call to `OrderManagement.complete(…)`.
128128
Spring Modulith's `PublishedEvents` abstraction allows testing that an integration test case has caused particular application events to be published:

spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@
2626
import org.springframework.beans.factory.annotation.Autowired;
2727
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
2828
import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
29-
import org.springframework.boot.test.mock.mockito.MockBean;
30-
import org.springframework.boot.test.mock.mockito.SpyBean;
3129
import org.springframework.jdbc.core.JdbcOperations;
3230
import org.springframework.modulith.events.core.EventSerializer;
3331
import org.springframework.modulith.testapp.TestApplication;
3432
import org.springframework.test.context.ActiveProfiles;
3533
import org.springframework.test.context.ContextConfiguration;
34+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
35+
import org.springframework.test.context.bean.override.mockito.MockitoSpyBean;
3636
import org.testcontainers.junit.jupiter.Testcontainers;
3737

3838
/**
@@ -48,7 +48,7 @@ class DatabaseSchemaInitializerIntegrationTests {
4848
@ContextConfiguration(classes = TestApplication.class)
4949
@Testcontainers(disabledWithoutDocker = true)
5050
static class TestBase {
51-
@MockBean EventSerializer serializer;
51+
@MockitoBean EventSerializer serializer;
5252
}
5353

5454
@Nested
@@ -73,7 +73,7 @@ void shouldCreateDatabaseSchemaOnStartUp() {
7373
@JdbcTest(properties = "spring.modulith.events.jdbc.schema-initialization.enabled=false")
7474
class InitializationDisabledExplicitly extends TestBase {
7575

76-
@SpyBean JdbcOperations operations;
76+
@MockitoSpyBean JdbcOperations operations;
7777
@Autowired Optional<DatabaseSchemaInitializer> initializer;
7878

7979
@Test // GH-3
@@ -91,7 +91,7 @@ void shouldNotCreateDatabaseSchemaOnStartUp() {
9191
@JdbcTest
9292
class InitializationDisabledByDefault extends TestBase {
9393

94-
@SpyBean JdbcOperations operations;
94+
@MockitoSpyBean JdbcOperations operations;
9595
@Autowired Optional<DatabaseSchemaInitializer> initializer;
9696

9797
@Test // GH-3

spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationAutoConfigurationIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
import org.junit.jupiter.api.Test;
2121
import org.springframework.beans.factory.annotation.Autowired;
2222
import org.springframework.boot.test.context.SpringBootTest;
23-
import org.springframework.boot.test.mock.mockito.MockBean;
2423
import org.springframework.context.ApplicationContext;
2524
import org.springframework.modulith.events.core.EventPublicationRegistry;
2625
import org.springframework.modulith.events.core.EventSerializer;
2726
import org.springframework.modulith.testapp.TestApplication;
27+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
2828

2929
/**
3030
* @author Dmitry Belyaev
@@ -38,7 +38,7 @@ class JdbcEventPublicationAutoConfigurationIntegrationTests {
3838

3939
@Autowired ApplicationContext context;
4040

41-
@MockBean EventSerializer serializer;
41+
@MockitoBean EventSerializer serializer;
4242

4343
@Test // GH-3
4444
void bootstrapsApplicationComponents() {

spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import org.junit.jupiter.api.Test;
3737
import org.springframework.beans.factory.annotation.Autowired;
3838
import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
39-
import org.springframework.boot.test.mock.mockito.MockBean;
39+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
4040
import org.springframework.context.annotation.Import;
4141
import org.springframework.jdbc.core.JdbcOperations;
4242
import org.springframework.modulith.events.core.EventSerializer;
@@ -69,7 +69,7 @@ static abstract class TestBase {
6969
@Autowired JdbcEventPublicationRepository repository;
7070
@Autowired JdbcRepositorySettings properties;
7171

72-
@MockBean EventSerializer serializer;
72+
@MockitoBean EventSerializer serializer;
7373

7474
@BeforeEach
7575
void cleanUp() {

spring-modulith-events/spring-modulith-events-jpa/src/test/java/org/springframework/modulith/events/jpa/JpaEventPublicationAutoConfigurationIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import org.springframework.beans.factory.BeanFactory;
2525
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
2626
import org.springframework.boot.test.context.SpringBootTest;
27-
import org.springframework.boot.test.mock.mockito.MockBean;
27+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
2828
import org.springframework.modulith.events.core.EventSerializer;
2929
import org.springframework.test.context.ContextConfiguration;
3030
import org.springframework.test.context.TestConstructor;
@@ -41,7 +41,7 @@ class JpaEventPublicationAutoConfigurationIntegrationTests {
4141

4242
private final BeanFactory factory;
4343

44-
@MockBean EventSerializer serializer;
44+
@MockitoBean EventSerializer serializer;
4545

4646
@Test // GH-10
4747
void registersJpaEventPublicationPackageForAutoConfiguration() {

spring-modulith-events/spring-modulith-events-jpa/src/test/java/org/springframework/modulith/events/jpa/JpaEventPublicationConfigurationIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import org.junit.jupiter.api.Test;
2424
import org.springframework.boot.test.context.SpringBootTest;
25-
import org.springframework.boot.test.mock.mockito.MockBean;
25+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
2626
import org.springframework.context.ApplicationContext;
2727
import org.springframework.modulith.events.core.EventPublicationRegistry;
2828
import org.springframework.modulith.events.core.EventSerializer;
@@ -41,7 +41,7 @@ class JpaEventPublicationConfigurationIntegrationTests {
4141

4242
private final ApplicationContext context;
4343

44-
@MockBean EventSerializer serializer;
44+
@MockitoBean EventSerializer serializer;
4545

4646
@Test
4747
void bootstrapsApplicationComponents() {

spring-modulith-events/spring-modulith-events-neo4j/src/test/java/org/springframework/modulith/events/neo4j/Neo4jEventPublicationRepositoryTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import org.neo4j.driver.Driver;
3535
import org.neo4j.driver.GraphDatabase;
3636
import org.springframework.beans.factory.annotation.Autowired;
37-
import org.springframework.boot.test.mock.mockito.MockBean;
37+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
3838
import org.springframework.context.annotation.Bean;
3939
import org.springframework.context.annotation.Configuration;
4040
import org.springframework.context.annotation.Import;
@@ -69,7 +69,7 @@ class Neo4jEventPublicationRepositoryTest {
6969
@Autowired Driver driver;
7070
@Autowired Environment environment;
7171

72-
@MockBean EventSerializer eventSerializer;
72+
@MockitoBean EventSerializer eventSerializer;
7373

7474
CompletionMode completionMode;
7575

spring-modulith-events/spring-modulith-events-neo4j/src/test/java/org/springframework/modulith/events/neo4j/Neo4jIndexInitializerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import org.springframework.beans.factory.annotation.Autowired;
2828
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
2929
import org.springframework.boot.test.autoconfigure.data.neo4j.DataNeo4jTest;
30-
import org.springframework.boot.test.mock.mockito.MockBean;
30+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
3131
import org.springframework.context.annotation.Bean;
3232
import org.springframework.context.annotation.Configuration;
3333
import org.springframework.data.neo4j.core.Neo4jClient;
@@ -52,7 +52,7 @@ static class TestBase {
5252
@Container private static Neo4jContainer<?> neo4jContainer = new Neo4jContainer<>(DockerImageName.parse("neo4j:5"))
5353
.withRandomPassword();
5454

55-
@MockBean EventSerializer eventSerializer;
55+
@MockitoBean EventSerializer eventSerializer;
5656

5757
@Configuration
5858
static class Config {

spring-modulith-integration-test/src/test/java/com/acme/myproject/fieldinjected/FieldInjectedIntegrationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import org.junit.jupiter.api.Test;
2121
import org.springframework.beans.factory.annotation.Autowired;
22-
import org.springframework.boot.test.mock.mockito.MockBean;
22+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
2323
import org.springframework.modulith.core.ApplicationModules;
2424
import org.springframework.modulith.test.ModuleTestExecution;
2525

@@ -36,7 +36,7 @@ class FieldInjectedIntegrationTest {
3636

3737
@Autowired ModuleTestExecution execution;
3838

39-
@MockBean ServiceComponentA dependency;
39+
@MockitoBean ServiceComponentA dependency;
4040

4141
@Test
4242
void rejectsFieldInjection() {

spring-modulith-integration-test/src/test/java/com/acme/myproject/moduleB/ModuleBTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.mockito.Mockito;
2323
import org.springframework.beans.factory.annotation.Autowired;
2424
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
25-
import org.springframework.boot.test.mock.mockito.MockBean;
25+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
2626
import org.springframework.context.ApplicationContext;
2727
import org.springframework.modulith.test.ApplicationModuleTest.BootstrapMode;
2828
import org.springframework.modulith.test.TestUtils;
@@ -55,7 +55,7 @@ void failsToStartBecauseServiceComponentAIsMissing() throws Exception {
5555
static class WithMocksTest {
5656

5757
@Autowired ApplicationContext context;
58-
@MockBean ServiceComponentA serviceComponentA;
58+
@MockitoBean ServiceComponentA serviceComponentA;
5959

6060
@Test
6161
void bootstrapsModuleB() {

spring-modulith-integration-test/src/test/java/com/acme/myproject/moduleC/ModuleCTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.junit.jupiter.api.Nested;
2121
import org.junit.jupiter.api.Test;
2222
import org.springframework.beans.factory.annotation.Autowired;
23-
import org.springframework.boot.test.mock.mockito.MockBean;
23+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
2424
import org.springframework.modulith.test.ApplicationModuleTest.BootstrapMode;
2525
import org.springframework.modulith.test.TestUtils;
2626

@@ -61,7 +61,7 @@ void failsWithDirectDependency() {
6161
@NonVerifyingModuleTest(BootstrapMode.DIRECT_DEPENDENCIES)
6262
static class SucceedsWithDirectDependencyPlusItsDependenciesMocksTest {
6363

64-
@MockBean ServiceComponentA serviceComponentA;
64+
@MockitoBean ServiceComponentA serviceComponentA;
6565

6666
@Test
6767
void bootstrapsContext() {

src/docs/antora/modules/ROOT/pages/testing.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ Java::
9090
@ApplicationModuleTest
9191
class InventoryIntegrationTests {
9292
93-
@MockBean SomeOtherComponent someOtherComponent;
93+
@MockitoBean SomeOtherComponent someOtherComponent;
9494
}
9595
----
9696
Kotlin::
@@ -100,11 +100,11 @@ Kotlin::
100100
@ApplicationModuleTest
101101
class InventoryIntegrationTests {
102102
103-
@MockBean SomeOtherComponent someOtherComponent
103+
@MockitoBean SomeOtherComponent someOtherComponent
104104
}
105105
----
106106
======
107-
Spring Boot will create bean definitions and instances for the types defined as `@MockBean` and add them to the `ApplicationContext` bootstrapped for the test run.
107+
Spring Boot will create bean definitions and instances for the types defined as `@MockitoBean` and add them to the `ApplicationContext` bootstrapped for the test run.
108108

109109
If you find your application module depending on too many beans of other ones, that is usually a sign of high coupling between them.
110110
The dependencies should be reviewed for whether they are candidates for replacement by publishing xref:events.adoc#events[domain events].

0 commit comments

Comments
 (0)