From 9d0fd0e4e6c935e80f467e277803c00c2dd7b9c5 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Fri, 24 Feb 2017 13:17:48 +0100 Subject: [PATCH 1/2] MockingProgress: replaced getVerificationListeners() with fireVerificationEvent(..) --- .../org/mockito/internal/MockitoCore.java | 6 +- .../internal/progress/MockingProgress.java | 10 ++-- .../progress/MockingProgressImpl.java | 10 +--- .../MockAwareVerificationMode.java | 23 ++++--- .../progress/MockingProgressImplTest.java | 60 +++++++++++++++---- 5 files changed, 69 insertions(+), 40 deletions(-) diff --git a/src/main/java/org/mockito/internal/MockitoCore.java b/src/main/java/org/mockito/internal/MockitoCore.java index 791e0d1d64..c15d8a2bf6 100644 --- a/src/main/java/org/mockito/internal/MockitoCore.java +++ b/src/main/java/org/mockito/internal/MockitoCore.java @@ -23,11 +23,9 @@ import java.util.Arrays; import java.util.List; -import java.util.Set; import org.mockito.InOrder; import org.mockito.MockSettings; import org.mockito.MockingDetails; -import org.mockito.exceptions.base.MockitoException; import org.mockito.exceptions.misusing.NotAMockException; import org.mockito.internal.creation.MockSettingsImpl; import org.mockito.internal.invocation.finder.VerifiableInvocationsFinder; @@ -43,7 +41,6 @@ import org.mockito.internal.verification.api.VerificationDataInOrder; import org.mockito.internal.verification.api.VerificationDataInOrderImpl; import org.mockito.invocation.Invocation; -import org.mockito.listeners.VerificationListener; import org.mockito.mock.MockCreationSettings; import org.mockito.stubbing.OngoingStubbing; import org.mockito.stubbing.Stubber; @@ -70,7 +67,6 @@ public T mock(Class typeToMock, MockSettings settings) { public OngoingStubbing when(T methodCall) { MockingProgress mockingProgress = mockingProgress(); mockingProgress.stubbingStarted(); - @SuppressWarnings("unchecked") OngoingStubbing stubbing = (OngoingStubbing) mockingProgress.pullOngoingStubbing(); if (stubbing == null) { mockingProgress.reset(); @@ -88,7 +84,7 @@ public T verify(T mock, VerificationMode mode) { } MockingProgress mockingProgress = mockingProgress(); VerificationMode actualMode = mockingProgress.maybeVerifyLazily(mode); - mockingProgress.verificationStarted(new MockAwareVerificationMode(mock, actualMode, mockingProgress.verificationListeners())); + mockingProgress.verificationStarted(new MockAwareVerificationMode(mock, actualMode, mockingProgress)); return mock; } diff --git a/src/main/java/org/mockito/internal/progress/MockingProgress.java b/src/main/java/org/mockito/internal/progress/MockingProgress.java index 47bc900113..39d5fd19d1 100644 --- a/src/main/java/org/mockito/internal/progress/MockingProgress.java +++ b/src/main/java/org/mockito/internal/progress/MockingProgress.java @@ -5,11 +5,10 @@ package org.mockito.internal.progress; -import java.util.Set; import org.mockito.listeners.MockitoListener; -import org.mockito.listeners.VerificationListener; import org.mockito.mock.MockCreationSettings; import org.mockito.stubbing.OngoingStubbing; +import org.mockito.verification.VerificationEvent; import org.mockito.verification.VerificationMode; import org.mockito.verification.VerificationStrategy; @@ -19,7 +18,7 @@ public interface MockingProgress { OngoingStubbing pullOngoingStubbing(); - Set verificationListeners(); + void fireVerificationEvent(VerificationEvent event); void verificationStarted(VerificationMode verificationMode); @@ -34,8 +33,8 @@ public interface MockingProgress { void reset(); /** - * Removes ongoing stubbing so that in case the framework is misused - * state validation errors are more accurate + * Removes ongoing stubbing so that in case the framework is misused state + * validation errors are more accurate */ void resetOngoingStubbing(); @@ -55,4 +54,5 @@ public interface MockingProgress { * Removes all listeners added via {@link #addListener(MockitoListener)}. */ void clearListeners(); + } diff --git a/src/main/java/org/mockito/internal/progress/MockingProgressImpl.java b/src/main/java/org/mockito/internal/progress/MockingProgressImpl.java index a0f8c668d2..66484ee084 100644 --- a/src/main/java/org/mockito/internal/progress/MockingProgressImpl.java +++ b/src/main/java/org/mockito/internal/progress/MockingProgressImpl.java @@ -15,6 +15,7 @@ import org.mockito.listeners.VerificationListener; import org.mockito.mock.MockCreationSettings; import org.mockito.stubbing.OngoingStubbing; +import org.mockito.verification.VerificationEvent; import org.mockito.verification.VerificationMode; import org.mockito.verification.VerificationStrategy; @@ -58,19 +59,14 @@ public OngoingStubbing pullOngoingStubbing() { } @Override - public Set verificationListeners() { - final LinkedHashSet verificationListeners = new LinkedHashSet(); - + public void fireVerificationEvent(VerificationEvent event) { for (MockitoListener listener : listeners) { if (listener instanceof VerificationListener) { - verificationListeners.add((VerificationListener) listener); + ((VerificationListener) listener).onVerification(event); } } - - return verificationListeners; } - public void verificationStarted(VerificationMode verify) { validateState(); resetOngoingStubbing(); diff --git a/src/main/java/org/mockito/internal/verification/MockAwareVerificationMode.java b/src/main/java/org/mockito/internal/verification/MockAwareVerificationMode.java index af4c0e8d6c..bb663af8ed 100644 --- a/src/main/java/org/mockito/internal/verification/MockAwareVerificationMode.java +++ b/src/main/java/org/mockito/internal/verification/MockAwareVerificationMode.java @@ -4,42 +4,39 @@ */ package org.mockito.internal.verification; -import java.util.Set; +import org.mockito.internal.progress.MockingProgress; import org.mockito.internal.verification.api.VerificationData; -import org.mockito.listeners.VerificationListener; -import org.mockito.verification.VerificationEvent; import org.mockito.verification.VerificationMode; public class MockAwareVerificationMode implements VerificationMode { private final Object mock; private final VerificationMode mode; - private final Set listeners; + private final MockingProgress mockingProgress; - public MockAwareVerificationMode(Object mock, VerificationMode mode, Set listeners) { + public MockAwareVerificationMode(Object mock, VerificationMode mode, MockingProgress mockingProgress) { this.mock = mock; this.mode = mode; - this.listeners = listeners; + this.mockingProgress = mockingProgress; } public void verify(VerificationData data) { try { mode.verify(data); - notifyListeners(new VerificationEventImpl(mock, mode, data, null)); } catch (RuntimeException e) { - notifyListeners(new VerificationEventImpl(mock, mode, data, e)); + fireVerificationEvent( data, e); throw e; } catch (Error e) { - notifyListeners(new VerificationEventImpl(mock, mode, data, e)); + fireVerificationEvent(data, e); throw e; } + + fireVerificationEvent(data,null); } - private void notifyListeners(VerificationEvent event) { - for (VerificationListener listener : listeners) { - listener.onVerification(event); - } + private void fireVerificationEvent(VerificationData data, Throwable error) { + mockingProgress.fireVerificationEvent(new VerificationEventImpl(mock, mode, data, error)); } public Object getMock() { diff --git a/src/test/java/org/mockito/internal/progress/MockingProgressImplTest.java b/src/test/java/org/mockito/internal/progress/MockingProgressImplTest.java index b604e94297..90121b006d 100644 --- a/src/test/java/org/mockito/internal/progress/MockingProgressImplTest.java +++ b/src/test/java/org/mockito/internal/progress/MockingProgressImplTest.java @@ -5,19 +5,21 @@ package org.mockito.internal.progress; +import static junit.framework.TestCase.assertNull; +import static junit.framework.TestCase.assertSame; +import static junit.framework.TestCase.fail; +import static org.assertj.core.api.Assertions.assertThat; + import org.junit.Before; import org.junit.Test; import org.mockito.exceptions.base.MockitoException; +import org.mockito.internal.verification.VerificationEventImpl; import org.mockito.internal.verification.VerificationModeFactory; +import org.mockito.listeners.VerificationListener; +import org.mockito.verification.VerificationEvent; import org.mockito.verification.VerificationMode; -import org.mockitoutil.TestBase; - -import static junit.framework.TestCase.*; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -public class MockingProgressImplTest extends TestBase { +public class MockingProgressImplTest { private MockingProgress mockingProgress; @@ -45,15 +47,53 @@ public void shouldCheckIfVerificationWasFinished() throws Exception { try { mockingProgress.verificationStarted(VerificationModeFactory.atLeastOnce()); fail(); - } catch (MockitoException e) {} + } catch (MockitoException e) { + } } @Test public void shouldNotifyListenerSafely() throws Exception { - //when + // when mockingProgress.addListener(null); - //then no exception is thrown: + // then no exception is thrown: mockingProgress.mockingStarted(null, null); } + + @Test + public void fireVerificationEvent_noVerificationListenerRegistered_shouldThrowNoException() { + VerificationEvent event = new VerificationEventImpl(null, null, null, null); + + mockingProgress.fireVerificationEvent(event); + + } + + @Test + public void fireVerificationEvent_verificationListenerRegistered_shouldBeNotified() { + + AssertableVerificationListener listener = new AssertableVerificationListener(); + mockingProgress.addListener(listener); + + VerificationEvent event = new VerificationEventImpl(null, null, null, null); + + mockingProgress.fireVerificationEvent(event); + + listener.assertLastEventIsSameAs(event); + + } + + private static class AssertableVerificationListener implements VerificationListener { + + private VerificationEvent lastEvent; + + @Override + public void onVerification(VerificationEvent verificationEvent) { + lastEvent = verificationEvent; + } + + public void assertLastEventIsSameAs(VerificationEvent expected) { + assertThat(lastEvent).isSameAs(expected); + } + + } } From abce062d461d03e6c2d64963ab47bf773047cd32 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Fri, 24 Feb 2017 14:02:55 +0100 Subject: [PATCH 2/2] Removed the build breaking spaces in line 33 --- .../internal/verification/MockAwareVerificationMode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/mockito/internal/verification/MockAwareVerificationMode.java b/src/main/java/org/mockito/internal/verification/MockAwareVerificationMode.java index bb663af8ed..ec4d410449 100644 --- a/src/main/java/org/mockito/internal/verification/MockAwareVerificationMode.java +++ b/src/main/java/org/mockito/internal/verification/MockAwareVerificationMode.java @@ -30,7 +30,7 @@ public void verify(VerificationData data) { fireVerificationEvent(data, e); throw e; } - + fireVerificationEvent(data,null); }