From 767eb86520a0fc6dca977041b40e854637bebb1c Mon Sep 17 00:00:00 2001 From: Michael Schieder Date: Mon, 22 Mar 2021 15:59:44 +0100 Subject: [PATCH] Fix verification resolution for wrapped mocks (#2236) Fixes #2235 --- gradle/dependencies.gradle | 1 + .../java/org/mockito/internal/handler/MockHandlerImpl.java | 5 ++++- src/main/java/org/mockito/internal/util/MockUtil.java | 4 ++++ subprojects/extTest/extTest.gradle | 6 ++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 12f99897a3..c1dd1d384f 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -12,6 +12,7 @@ libraries.junit4 = 'junit:junit:4.13.2' libraries.junitJupiterApi = "org.junit.jupiter:junit-jupiter-api:${versions.junitJupiter}" libraries.junitPlatformLauncher = 'org.junit.platform:junit-platform-launcher:1.7.1' libraries.junitJupiterEngine = "org.junit.jupiter:junit-jupiter-engine:${versions.junitJupiter}" +libraries.junitVintageEngine = "org.junit.vintage:junit-vintage-engine:${versions.junitJupiter}" libraries.assertj = 'org.assertj:assertj-core:3.19.0' libraries.hamcrest = 'org.hamcrest:hamcrest-core:2.2' libraries.opentest4j = 'org.opentest4j:opentest4j:1.2.0' diff --git a/src/main/java/org/mockito/internal/handler/MockHandlerImpl.java b/src/main/java/org/mockito/internal/handler/MockHandlerImpl.java index 3d81b362c5..4b6bf12dfc 100644 --- a/src/main/java/org/mockito/internal/handler/MockHandlerImpl.java +++ b/src/main/java/org/mockito/internal/handler/MockHandlerImpl.java @@ -14,6 +14,7 @@ import org.mockito.internal.stubbing.OngoingStubbingImpl; import org.mockito.internal.stubbing.StubbedInvocationMatcher; import org.mockito.internal.stubbing.answers.DefaultAnswerValidator; +import org.mockito.internal.util.MockUtil; import org.mockito.internal.verification.MockAwareVerificationMode; import org.mockito.internal.verification.VerificationDataImpl; import org.mockito.invocation.Invocation; @@ -65,7 +66,9 @@ public Object handle(Invocation invocation) throws Throwable { if (verificationMode != null) { // We need to check if verification was started on the correct mock // - see VerifyingWithAnExtraCallToADifferentMockTest (bug 138) - if (((MockAwareVerificationMode) verificationMode).getMock() == invocation.getMock()) { + if (MockUtil.areSameMocks( + ((MockAwareVerificationMode) verificationMode).getMock(), + invocation.getMock())) { VerificationDataImpl data = new VerificationDataImpl(invocationContainer, invocationMatcher); verificationMode.verify(data); diff --git a/src/main/java/org/mockito/internal/util/MockUtil.java b/src/main/java/org/mockito/internal/util/MockUtil.java index 2927d6aabf..2159608623 100644 --- a/src/main/java/org/mockito/internal/util/MockUtil.java +++ b/src/main/java/org/mockito/internal/util/MockUtil.java @@ -120,6 +120,10 @@ private static Object resolve(Object mock) { return mock; } + public static boolean areSameMocks(Object mockA, Object mockB) { + return mockA == mockB || resolve(mockA) == resolve(mockB); + } + public static MockName getMockName(Object mock) { return getMockHandler(mock).getMockSettings().getMockName(); } diff --git a/subprojects/extTest/extTest.gradle b/subprojects/extTest/extTest.gradle index 35b9811af8..61c26c1d67 100644 --- a/subprojects/extTest/extTest.gradle +++ b/subprojects/extTest/extTest.gradle @@ -14,6 +14,12 @@ dependencies { testCompile libraries.junit4 testCompile libraries.assertj testCompile libraries.junitJupiterApi + testRuntime libraries.junitJupiterEngine + testRuntime libraries.junitVintageEngine +} + +tasks.withType(Test) { + useJUnitPlatform() } configurations.all {