From 267efec81eaa26e28b0cec5fc641f9b3bf410766 Mon Sep 17 00:00:00 2001 From: Thibault Faure Date: Mon, 22 Jan 2024 22:45:11 +0100 Subject: [PATCH] BAEL-7399 Code for the Injecting @Mock and @Captor in JUnit5 Method Parameters article --- testing-modules/mockito-2/pom.xml | 7 +++ .../ConstructorInjectionUnitTest.java | 36 +++++++++++++ .../MethodParameterInjectionUnitTest.java | 51 +++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 testing-modules/mockito-2/src/test/java/com/baeldung/injection/ConstructorInjectionUnitTest.java create mode 100644 testing-modules/mockito-2/src/test/java/com/baeldung/injection/MethodParameterInjectionUnitTest.java diff --git a/testing-modules/mockito-2/pom.xml b/testing-modules/mockito-2/pom.xml index 100c9d7015..9e9d208266 100644 --- a/testing-modules/mockito-2/pom.xml +++ b/testing-modules/mockito-2/pom.xml @@ -18,10 +18,17 @@ ${mockito-inline.version} test + + org.mockito + mockito-junit-jupiter + ${mockito.version} + test + 4.8.1 + 5.9.0 \ No newline at end of file diff --git a/testing-modules/mockito-2/src/test/java/com/baeldung/injection/ConstructorInjectionUnitTest.java b/testing-modules/mockito-2/src/test/java/com/baeldung/injection/ConstructorInjectionUnitTest.java new file mode 100644 index 0000000000..c94cbb4c02 --- /dev/null +++ b/testing-modules/mockito-2/src/test/java/com/baeldung/injection/ConstructorInjectionUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.injection; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.function.Function; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class ConstructorInjectionUnitTest { + + Function function; + + ArgumentCaptor captor; + + public ConstructorInjectionUnitTest(@Mock Function function, @Captor ArgumentCaptor captor) { + this.function = function; + this.captor = captor; + } + + @Test + void whenInjectedViaArgumentParameters_thenSetupCorrectly() { + when(function.apply("bael")).thenReturn("dung"); + assertEquals("dung", function.apply("bael")); + verify(function).apply(captor.capture()); + assertEquals("bael", captor.getValue()); + } + +} diff --git a/testing-modules/mockito-2/src/test/java/com/baeldung/injection/MethodParameterInjectionUnitTest.java b/testing-modules/mockito-2/src/test/java/com/baeldung/injection/MethodParameterInjectionUnitTest.java new file mode 100644 index 0000000000..27634a86ab --- /dev/null +++ b/testing-modules/mockito-2/src/test/java/com/baeldung/injection/MethodParameterInjectionUnitTest.java @@ -0,0 +1,51 @@ +package com.baeldung.injection; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.function.Function; + +import org.junit.jupiter.api.RepeatedTest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class MethodParameterInjectionUnitTest { + + @Test + void whenMockInjectedViaArgumentParameters_thenSetupCorrectly(@Mock Function mockFunction) { + when(mockFunction.apply("bael")).thenReturn("dung"); + assertEquals("dung", mockFunction.apply("bael")); + } + + @Test + void whenArgumentCaptorInjectedViaArgumentParameters_thenSetupCorrectly(@Mock Function mockFunction, @Captor ArgumentCaptor captor) { + mockFunction.apply("baeldung"); + verify(mockFunction).apply(captor.capture()); + assertEquals("baeldung", captor.getValue()); + } + + @RepeatedTest(2) + void whenInjectedInRepeatedTest_thenSetupCorrectly(@Mock Function mockFunction, @Captor ArgumentCaptor captor) { + mockFunction.apply("baeldung"); + verify(mockFunction).apply(captor.capture()); + assertEquals("baeldung", captor.getValue()); + } + + @ParameterizedTest + @ValueSource(strings = {"", "bael", "dung"}) + void whenInjectedInParameterizedTest_thenSetupCorrectly(String input, @Mock Function mockFunction, @Captor ArgumentCaptor captor) { + when(mockFunction.apply(input)).thenReturn("baeldung"); + assertEquals("baeldung", mockFunction.apply(input)); + verify(mockFunction).apply(captor.capture()); + assertEquals(input, captor.getValue()); + } + +}