From fa6da3bd4392f88ea95d845005188d46080997dc Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 10 Jan 2024 13:33:11 +0100 Subject: [PATCH] Cleanup mockito-configuration Provide a MoreAnwers class, which exposes an THROWS_UNSTUBBED_METHOD answer. Also split out implementation into org.opendaylight.mockito, so that we do not risk a class name collision. Change-Id: I20c61b5ca7b83fba9da6fe16594c69bfc46b71ca Signed-off-by: Robert Varga --- common/mockito-configuration/pom.xml | 9 +++-- .../configuration/MockitoConfiguration.java | 5 +-- .../mockito}/ArgumentsExtractorVerifier.java | 2 +- .../org/opendaylight/mockito/MoreAnswers.java | 34 +++++++++++++++++++ .../mockito/ThrowsUnstubbedMethod.java} | 11 +++--- .../mockito}/UnstubbedMethodException.java | 14 ++++++-- .../opendaylight/mockito/package-info.java | 11 ++++++ .../ArgumentsExtractorVerifierTest.java | 10 +++--- .../mockito}/DefaultAnswerTest.java | 13 ++++--- 9 files changed, 83 insertions(+), 26 deletions(-) rename common/mockito-configuration/src/main/java/org/{mockito/configuration => opendaylight/mockito}/ArgumentsExtractorVerifier.java (98%) create mode 100644 common/mockito-configuration/src/main/java/org/opendaylight/mockito/MoreAnswers.java rename common/mockito-configuration/src/main/java/org/{mockito/configuration/ThrowsUnstubbedMethodException.java => opendaylight/mockito/ThrowsUnstubbedMethod.java} (60%) rename common/mockito-configuration/src/main/java/org/{mockito/configuration => opendaylight/mockito}/UnstubbedMethodException.java (62%) create mode 100644 common/mockito-configuration/src/main/java/org/opendaylight/mockito/package-info.java rename common/mockito-configuration/src/test/java/org/{mockito/configuration => opendaylight/mockito}/ArgumentsExtractorVerifierTest.java (77%) rename common/mockito-configuration/src/test/java/org/{mockito/configuration => opendaylight/mockito}/DefaultAnswerTest.java (67%) diff --git a/common/mockito-configuration/pom.xml b/common/mockito-configuration/pom.xml index b04b4594bf..c47830e2a0 100644 --- a/common/mockito-configuration/pom.xml +++ b/common/mockito-configuration/pom.xml @@ -24,6 +24,10 @@ jar ${project.artifactId} + + true + + @@ -31,10 +35,5 @@ mockito-core compile - - com.github.spotbugs - spotbugs-annotations - true - diff --git a/common/mockito-configuration/src/main/java/org/mockito/configuration/MockitoConfiguration.java b/common/mockito-configuration/src/main/java/org/mockito/configuration/MockitoConfiguration.java index b6909b5c44..716f21b3a1 100644 --- a/common/mockito-configuration/src/main/java/org/mockito/configuration/MockitoConfiguration.java +++ b/common/mockito-configuration/src/main/java/org/mockito/configuration/MockitoConfiguration.java @@ -8,13 +8,14 @@ package org.mockito.configuration; import org.mockito.stubbing.Answer; +import org.opendaylight.mockito.MoreAnswers; /** - * Configuration customization for Mockito. Change default answer to {@link ThrowsUnstubbedMethodException}. + * Configuration customization for Mockito. Change default answer to {@link MoreAnswers#THROWS_UNSTUBBED_METHOD}. */ public class MockitoConfiguration extends DefaultMockitoConfiguration { @Override public Answer getDefaultAnswer() { - return new ThrowsUnstubbedMethodException(); + return MoreAnswers.THROWS_UNSTUBBED_METHOD; } } diff --git a/common/mockito-configuration/src/main/java/org/mockito/configuration/ArgumentsExtractorVerifier.java b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/ArgumentsExtractorVerifier.java similarity index 98% rename from common/mockito-configuration/src/main/java/org/mockito/configuration/ArgumentsExtractorVerifier.java rename to common/mockito-configuration/src/main/java/org/opendaylight/mockito/ArgumentsExtractorVerifier.java index 692bf70f3b..08280d6dac 100644 --- a/common/mockito-configuration/src/main/java/org/mockito/configuration/ArgumentsExtractorVerifier.java +++ b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/ArgumentsExtractorVerifier.java @@ -5,7 +5,7 @@ * 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 org.mockito.configuration; +package org.opendaylight.mockito; import org.mockito.exceptions.base.MockitoException; import org.mockito.internal.invocation.InvocationsFinder; diff --git a/common/mockito-configuration/src/main/java/org/opendaylight/mockito/MoreAnswers.java b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/MoreAnswers.java new file mode 100644 index 0000000000..579cf0184e --- /dev/null +++ b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/MoreAnswers.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others. 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 org.opendaylight.mockito; + +import static java.util.Objects.requireNonNull; + +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +/** + * Additional {@link Answer}s. + */ +public enum MoreAnswers implements Answer { + /** + * An {@link Answer} that throws {@link UnstubbedMethodException}. + */ + THROWS_UNSTUBBED_METHOD(new ThrowsUnstubbedMethod()); + + private final ThrowsUnstubbedMethod implementation; + + MoreAnswers(final ThrowsUnstubbedMethod implementation) { + this.implementation = requireNonNull(implementation); + } + + @Override + public Object answer(final InvocationOnMock invocation) throws Throwable { + return implementation.answer(invocation); + } +} diff --git a/common/mockito-configuration/src/main/java/org/mockito/configuration/ThrowsUnstubbedMethodException.java b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/ThrowsUnstubbedMethod.java similarity index 60% rename from common/mockito-configuration/src/main/java/org/mockito/configuration/ThrowsUnstubbedMethodException.java rename to common/mockito-configuration/src/main/java/org/opendaylight/mockito/ThrowsUnstubbedMethod.java index e08b755bb6..fe9e99e968 100644 --- a/common/mockito-configuration/src/main/java/org/mockito/configuration/ThrowsUnstubbedMethodException.java +++ b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/ThrowsUnstubbedMethod.java @@ -5,22 +5,21 @@ * 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 org.mockito.configuration; +package org.opendaylight.mockito; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.Serializable; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; /** - * Answer that throws {@link UnstubbedMethodException}. + * An {@link Answer} that throws {@link UnstubbedMethodException}. */ -@SuppressFBWarnings("NM_CLASS_NOT_EXCEPTION") -public class ThrowsUnstubbedMethodException implements Answer, Serializable { +final class ThrowsUnstubbedMethod implements Answer, Serializable { + @java.io.Serial private static final long serialVersionUID = 1L; @Override public Object answer(final InvocationOnMock invocation) { - throw new UnstubbedMethodException(invocation.toString() + " was not stubbed"); + throw new UnstubbedMethodException(invocation + " was not stubbed"); } } diff --git a/common/mockito-configuration/src/main/java/org/mockito/configuration/UnstubbedMethodException.java b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/UnstubbedMethodException.java similarity index 62% rename from common/mockito-configuration/src/main/java/org/mockito/configuration/UnstubbedMethodException.java rename to common/mockito-configuration/src/main/java/org/opendaylight/mockito/UnstubbedMethodException.java index 5432e7c832..1b860785b4 100644 --- a/common/mockito-configuration/src/main/java/org/mockito/configuration/UnstubbedMethodException.java +++ b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/UnstubbedMethodException.java @@ -5,15 +5,23 @@ * 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 org.mockito.configuration; +package org.opendaylight.mockito; + +import static java.util.Objects.requireNonNull; /** * Exception to be thrown on unstubbed method call. */ -public class UnstubbedMethodException extends RuntimeException { +public final class UnstubbedMethodException extends RuntimeException { + @java.io.Serial private static final long serialVersionUID = 1L; + /** + * Default constructor. + * + * @param message detail message + */ public UnstubbedMethodException(final String message) { - super(message); + super(requireNonNull(message)); } } diff --git a/common/mockito-configuration/src/main/java/org/opendaylight/mockito/package-info.java b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/package-info.java new file mode 100644 index 0000000000..70469ba345 --- /dev/null +++ b/common/mockito-configuration/src/main/java/org/opendaylight/mockito/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others. 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 + */ +/** + * Various utilities for working with Mockito -- for example {@link org.opendaylight.mockito.MoreAnswers}. + */ +package org.opendaylight.mockito; \ No newline at end of file diff --git a/common/mockito-configuration/src/test/java/org/mockito/configuration/ArgumentsExtractorVerifierTest.java b/common/mockito-configuration/src/test/java/org/opendaylight/mockito/ArgumentsExtractorVerifierTest.java similarity index 77% rename from common/mockito-configuration/src/test/java/org/mockito/configuration/ArgumentsExtractorVerifierTest.java rename to common/mockito-configuration/src/test/java/org/opendaylight/mockito/ArgumentsExtractorVerifierTest.java index 5e6d4429e4..2c90375279 100644 --- a/common/mockito-configuration/src/test/java/org/mockito/configuration/ArgumentsExtractorVerifierTest.java +++ b/common/mockito-configuration/src/test/java/org/opendaylight/mockito/ArgumentsExtractorVerifierTest.java @@ -5,7 +5,7 @@ * 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 org.mockito.configuration; +package org.opendaylight.mockito; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.mockito.ArgumentMatchers.any; @@ -21,16 +21,16 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class ArgumentsExtractorVerifierTest { @Mock - List mockedList; + private List mockedList; @Test void test() { doReturn(Boolean.TRUE).when(mockedList).add(any(String.class)); - final String argument = "something"; + final var argument = "something"; mockedList.add(argument); // retrieve argument - final ArgumentsExtractorVerifier argumentsExtractorVerifier = new ArgumentsExtractorVerifier(); + final var argumentsExtractorVerifier = new ArgumentsExtractorVerifier(); verify(mockedList, argumentsExtractorVerifier).add(any(String.class)); - assertArrayEquals(new Object[]{argument}, argumentsExtractorVerifier.getArguments()); + assertArrayEquals(new Object[]{ argument }, argumentsExtractorVerifier.getArguments()); } } diff --git a/common/mockito-configuration/src/test/java/org/mockito/configuration/DefaultAnswerTest.java b/common/mockito-configuration/src/test/java/org/opendaylight/mockito/DefaultAnswerTest.java similarity index 67% rename from common/mockito-configuration/src/test/java/org/mockito/configuration/DefaultAnswerTest.java rename to common/mockito-configuration/src/test/java/org/opendaylight/mockito/DefaultAnswerTest.java index 3114667e8e..83260b7a2e 100644 --- a/common/mockito-configuration/src/test/java/org/mockito/configuration/DefaultAnswerTest.java +++ b/common/mockito-configuration/src/test/java/org/opendaylight/mockito/DefaultAnswerTest.java @@ -5,20 +5,25 @@ * 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 org.mockito.configuration; +package org.opendaylight.mockito; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.mock; import java.io.Closeable; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +@ExtendWith(MockitoExtension.class) class DefaultAnswerTest { + @Mock + private Closeable mock; + @Test void testAnswering() { - final var mock = mock(Closeable.class); final var e = assertThrows(UnstubbedMethodException.class, mock::close); - assertEquals("closeable.close(); was not stubbed", e.getMessage()); + assertEquals("mock.close(); was not stubbed", e.getMessage()); } } -- 2.36.6