Skip to content

Instantly share code, notes, and snippets.

@pablohdzvizcarra
Last active February 20, 2022 16:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pablohdzvizcarra/f79ba1639cf2b192393a45e3d921b6dc to your computer and use it in GitHub Desktop.
Save pablohdzvizcarra/f79ba1639cf2b192393a45e3d921b6dc to your computer and use it in GitHub Desktop.
tests mockito using verification methods
package org.example.observer;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
class ConcreteSubjectTest {
@Test
void observersHandleEventsFromSubject() {
// given
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserverA observerA = Mockito.spy(new ConcreteObserverA());
ConcreteObserverB observerB = Mockito.spy(new ConcreteObserverB());
// when
subject.notifyObservers("No listeners");
subject.registerObserver(observerA);
subject.notifyObservers("Message for A");
subject.registerObserver(observerB);
subject.notifyObservers("Message for A & B");
subject.unregisterObserver(observerA);
subject.notifyObservers("Message for B");
subject.unregisterObserver(observerB);
subject.notifyObservers("No Listeners");
// then
Mockito.verify(observerA, Mockito.times(1)).observe("Message for A");
Mockito.verify(observerA, Mockito.times(1)).observe("Message for A & B");
Mockito.verifyNoMoreInteractions(observerA);
Mockito.verify(observerB, Mockito.times(1)).observe("Message for A & B");
Mockito.verify(observerB, Mockito.times(1)).observe("Message for B");
Mockito.verifyNoMoreInteractions(observerB);
}
@Test
void subjectLeveragesLambdas() {
Subject<String> subject = new ConcreteSubject();
subject.registerObserver(e -> System.out.println("A: " + e));
subject.registerObserver(e -> System.out.println("B: " + e));
subject.notifyObservers("This message will receive A & B");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment