From adacecbd758459b2d890009ca31d7342683bf260 Mon Sep 17 00:00:00 2001 From: Shreyas Mahajan Date: Fri, 2 Nov 2018 11:54:23 +0530 Subject: [PATCH 1/2] BAEL-2201-shreyas-Replacing customer written MockitoExtension class with mockito's own --- testing-modules/junit-5/pom.xml | 13 +++- .../junit5/mockito/MockitoExtension.java | 75 ------------------- .../junit5/mockito/UserServiceUnitTest.java | 19 ++--- 3 files changed, 18 insertions(+), 89 deletions(-) delete mode 100644 testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/MockitoExtension.java diff --git a/testing-modules/junit-5/pom.xml b/testing-modules/junit-5/pom.xml index 93365264ac..b7600267d9 100644 --- a/testing-modules/junit-5/pom.xml +++ b/testing-modules/junit-5/pom.xml @@ -72,6 +72,13 @@ + + org.mockito + mockito-junit-jupiter + ${mockito.junit.jupiter.version} + test + + org.powermock powermock-api-mockito2 @@ -118,13 +125,13 @@ - 5.2.0 + 5.3.1 + 2.23.0 1.2.0 5.2.0 2.8.2 1.4.196 - 2.8.9 - 1.7.4 + 2.0.0-RC.1 2.21.0 1.6.0 5.0.1.RELEASE diff --git a/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/MockitoExtension.java b/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/MockitoExtension.java deleted file mode 100644 index 5836ef46e6..0000000000 --- a/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/MockitoExtension.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2015-2016 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v1.0 which - * accompanies this distribution and is available at - * - * http://www.eclipse.org/legal/epl-v10.html - */ - -package com.baeldung.junit5.mockito; - -import static org.mockito.Mockito.mock; - -import java.lang.reflect.Parameter; - -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.ExtensionContext.Namespace; -import org.junit.jupiter.api.extension.ExtensionContext.Store; -import org.junit.jupiter.api.extension.ParameterContext; -import org.junit.jupiter.api.extension.ParameterResolver; -import org.junit.jupiter.api.extension.TestInstancePostProcessor; -import org.mockito.MockitoAnnotations; -import org.mockito.Mock; - -/** - * {@code MockitoExtension} showcases the {@link TestInstancePostProcessor} - * and {@link ParameterResolver} extension APIs of JUnit 5 by providing - * dependency injection support at the field level and at the method parameter - * level via Mockito 2.x's {@link Mock @Mock} annotation. - * - * @since 5.0 - */ -public class MockitoExtension implements TestInstancePostProcessor, ParameterResolver { - - @Override - public void postProcessTestInstance(Object testInstance, ExtensionContext context) { - MockitoAnnotations.initMocks(testInstance); - } - - @Override - public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { - return parameterContext.getParameter().isAnnotationPresent(Mock.class); - } - - @Override - public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { - return getMock(parameterContext.getParameter(), extensionContext); - } - - private Object getMock(Parameter parameter, ExtensionContext extensionContext) { - Class mockType = parameter.getType(); - Store mocks = extensionContext.getStore(Namespace.create(MockitoExtension.class, mockType)); - String mockName = getMockName(parameter); - - if (mockName != null) { - return mocks.getOrComputeIfAbsent(mockName, key -> mock(mockType, mockName)); - } - else { - return mocks.getOrComputeIfAbsent(mockType.getCanonicalName(), key -> mock(mockType)); - } - } - - private String getMockName(Parameter parameter) { - String explicitMockName = parameter.getAnnotation(Mock.class).name().trim(); - if (!explicitMockName.isEmpty()) { - return explicitMockName; - } - else if (parameter.isNamePresent()) { - return parameter.getName(); - } - return null; - } - -} \ No newline at end of file diff --git a/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java b/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java index 1ddab0531a..2e94072e79 100644 --- a/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java +++ b/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java @@ -3,19 +3,16 @@ package com.baeldung.junit5.mockito; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.platform.runner.JUnitPlatform; -import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; +import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.stubbing.Answer; import com.baeldung.junit5.mockito.repository.MailClient; @@ -25,25 +22,25 @@ import com.baeldung.junit5.mockito.service.DefaultUserService; import com.baeldung.junit5.mockito.service.Errors; import com.baeldung.junit5.mockito.service.UserService; -@RunWith(JUnitPlatform.class) @ExtendWith(MockitoExtension.class) public class UserServiceUnitTest { UserService userService; @Mock UserRepository userRepository; - + @Mock MailClient mailClient; + User user; @BeforeEach - void init(@Mock SettingRepository settingRepository, @Mock MailClient mailClient) { + void init(@Mock SettingRepository settingRepository) { userService = new DefaultUserService(userRepository, settingRepository, mailClient); - when(settingRepository.getUserMinAge()).thenReturn(10); + lenient().when(settingRepository.getUserMinAge()).thenReturn(10); when(settingRepository.getUserNameMinLength()).thenReturn(4); - when(userRepository.isUsernameAlreadyExists(any(String.class))).thenReturn(false); + lenient().when(userRepository.isUsernameAlreadyExists(any(String.class))).thenReturn(false); } @Test - void givenValidUser_whenSaveUser_thenSucceed(@Mock MailClient mailClient) { + void givenValidUser_whenSaveUser_thenSucceed() { // Given user = new User("Jerry", 12); when(userRepository.insert(any(User.class))).then(new Answer() { From 9604defd6c20b103cecc1fa333e770ab39adcf54 Mon Sep 17 00:00:00 2001 From: Shreyas Mahajan Date: Fri, 2 Nov 2018 14:55:16 +0530 Subject: [PATCH 2/2] BAEL-2201-shreyas-Minor changes to reflect the code used in article. --- .../baeldung/junit5/mockito/UserServiceUnitTest.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java b/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java index 2e94072e79..d4195e3b12 100644 --- a/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java +++ b/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java @@ -9,6 +9,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.platform.runner.JUnitPlatform; +import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; @@ -23,9 +25,11 @@ import com.baeldung.junit5.mockito.service.Errors; import com.baeldung.junit5.mockito.service.UserService; @ExtendWith(MockitoExtension.class) +@RunWith(JUnitPlatform.class) public class UserServiceUnitTest { UserService userService; + SettingRepository settingRepository; @Mock UserRepository userRepository; @Mock MailClient mailClient; @@ -37,10 +41,11 @@ public class UserServiceUnitTest { lenient().when(settingRepository.getUserMinAge()).thenReturn(10); when(settingRepository.getUserNameMinLength()).thenReturn(4); lenient().when(userRepository.isUsernameAlreadyExists(any(String.class))).thenReturn(false); + this.settingRepository = settingRepository; } @Test - void givenValidUser_whenSaveUser_thenSucceed() { + void givenValidUser_whenSaveUser_thenSucceed(@Mock MailClient mailClient) { // Given user = new User("Jerry", 12); when(userRepository.insert(any(User.class))).then(new Answer() { @@ -53,7 +58,9 @@ public class UserServiceUnitTest { return user; } }); - + + userService = new DefaultUserService(userRepository, settingRepository, mailClient); + // When User insertedUser = userService.register(user);