Skip to content

Commit 9c0500c

Browse files
quijotemarkus-gaisbauer-dt
authored andcommitted
Fix non-deterministic AssertionError when using MockMakers.SUBCLASS (mockito#3406)
1 parent a231205 commit 9c0500c

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

‎mockito-core/src/main/java/org/mockito/internal/util/MockUtil.java‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,10 @@ private static MockHandler<?> getMockHandlerOrNull(Object mock) {
157157
for (MockMaker mockMaker : mockMakers.values()) {
158158
MockHandler<?> handler = mockMaker.getHandler(mock);
159159
if (handler != null) {
160-
assert getMockMaker(handler.getMockSettings().getMockMaker()) == mockMaker;
161-
return handler;
160+
String mockMakerName = handler.getMockSettings().getMockMaker();
161+
if (getMockMaker(mockMakerName) == mockMaker) {
162+
return handler;
163+
}
162164
}
163165
}
164166
return null;

‎mockito-integration-tests/programmatic-tests/src/test/java/org/mockito/ProgrammaticMockMakerTest.java‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,17 @@ class InvalidMockMaker extends SubclassByteBuddyMockMaker {
157157
.hasMessageContaining(InvalidMockMaker.class.getName());
158158
}
159159

160+
@Test
161+
public void test_interface_after_subclass_mock_maker() {
162+
NonFinalClass subClassMock = Mockito.mock(NonFinalClass.class, Mockito.withSettings().mockMaker(MockMakers.SUBCLASS));
163+
Mockito.when(subClassMock.someMethod()).thenReturn("1");
164+
assertEquals("1", subClassMock.someMethod());
165+
166+
SomeInterface interfaceMock = Mockito.mock(SomeInterface.class);
167+
Mockito.when(interfaceMock.someMethod()).thenReturn("2");
168+
assertEquals("2", interfaceMock.someMethod());
169+
}
170+
160171
private static final class FinalClass {
161172
String someMethod() {
162173
return "ORIGINAL";
@@ -192,6 +203,16 @@ Container subContainer() {
192203
}
193204
}
194205

206+
private static class NonFinalClass {
207+
String someMethod() {
208+
return "ORIGINAL";
209+
}
210+
}
211+
212+
private interface SomeInterface {
213+
String someMethod();
214+
}
215+
195216
public static class CustomMockMaker extends SubclassByteBuddyMockMaker {
196217
@Override
197218
public <T> T createMock(MockCreationSettings<T> settings, MockHandler handler) {

0 commit comments

Comments
 (0)