Added tests for mediator pattern
This commit is contained in:
parent
2c82bd9450
commit
719f80a0d6
@ -14,5 +14,10 @@
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@ -0,0 +1,41 @@
|
||||
package com.iluwatar.mediator;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
|
||||
/**
|
||||
* Date: 12/19/15 - 10:00 PM
|
||||
*
|
||||
* @author Jeroen Meulemeester
|
||||
*/
|
||||
public class PartyImplTest {
|
||||
|
||||
/**
|
||||
* Verify if a member is notified when it's joining a party. Generate an action and see if the
|
||||
* other member gets it. Also check members don't get their own actions.
|
||||
*/
|
||||
@Test
|
||||
public void testPartyAction() {
|
||||
final PartyMember partyMember1 = mock(PartyMember.class);
|
||||
final PartyMember partyMember2 = mock(PartyMember.class);
|
||||
|
||||
final PartyImpl party = new PartyImpl();
|
||||
party.addMember(partyMember1);
|
||||
party.addMember(partyMember2);
|
||||
|
||||
verify(partyMember1).joinedParty(party);
|
||||
verify(partyMember2).joinedParty(party);
|
||||
|
||||
party.act(partyMember1, Action.GOLD);
|
||||
verifyZeroInteractions(partyMember1);
|
||||
verify(partyMember2).partyAction(Action.GOLD);
|
||||
|
||||
verifyNoMoreInteractions(partyMember1, partyMember2);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,128 @@
|
||||
package com.iluwatar.mediator;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
|
||||
import java.io.PrintStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
|
||||
/**
|
||||
* Date: 12/19/15 - 10:13 PM
|
||||
*
|
||||
* @author Jeroen Meulemeester
|
||||
*/
|
||||
@RunWith(Parameterized.class)
|
||||
public class PartyMemberTest {
|
||||
|
||||
@Parameterized.Parameters
|
||||
public static Collection<Supplier<PartyMember>[]> data() {
|
||||
return Arrays.asList(
|
||||
new Supplier[]{Hobbit::new},
|
||||
new Supplier[]{Hunter::new},
|
||||
new Supplier[]{Rogue::new},
|
||||
new Supplier[]{Wizard::new}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* The mocked standard out {@link PrintStream}, required since some actions on a {@link
|
||||
* PartyMember} have any influence on any other accessible objects, except for writing to std-out
|
||||
* using {@link System#out}
|
||||
*/
|
||||
private final PrintStream stdOutMock = mock(PrintStream.class);
|
||||
|
||||
/**
|
||||
* Keep the original std-out so it can be restored after the test
|
||||
*/
|
||||
private final PrintStream stdOutOrig = System.out;
|
||||
|
||||
/**
|
||||
* Inject the mocked std-out {@link PrintStream} into the {@link System} class before each test
|
||||
*/
|
||||
@Before
|
||||
public void setUp() {
|
||||
System.setOut(this.stdOutMock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removed the mocked std-out {@link PrintStream} again from the {@link System} class
|
||||
*/
|
||||
@After
|
||||
public void tearDown() {
|
||||
System.setOut(this.stdOutOrig);
|
||||
}
|
||||
|
||||
/**
|
||||
* The factory, used to create a new instance of the tested party member
|
||||
*/
|
||||
private final Supplier<PartyMember> memberSupplier;
|
||||
|
||||
/**
|
||||
* Create a new test instance, using the given {@link PartyMember} factory
|
||||
*
|
||||
* @param memberSupplier The party member factory
|
||||
*/
|
||||
public PartyMemberTest(final Supplier<PartyMember> memberSupplier) {
|
||||
this.memberSupplier = memberSupplier;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if a party action triggers the correct output to the std-Out
|
||||
*/
|
||||
@Test
|
||||
public void testPartyAction() {
|
||||
final PartyMember member = this.memberSupplier.get();
|
||||
|
||||
for (final Action action : Action.values()) {
|
||||
member.partyAction(action);
|
||||
verify(this.stdOutMock).println(member.toString() + " " + action.getDescription());
|
||||
}
|
||||
|
||||
verifyNoMoreInteractions(this.stdOutMock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if a member action triggers the expected interactions with the party class
|
||||
*/
|
||||
@Test
|
||||
public void testAct() {
|
||||
final PartyMember member = this.memberSupplier.get();
|
||||
|
||||
member.act(Action.GOLD);
|
||||
verifyZeroInteractions(this.stdOutMock);
|
||||
|
||||
final Party party = mock(Party.class);
|
||||
member.joinedParty(party);
|
||||
verify(this.stdOutMock).println(member.toString() + " joins the party");
|
||||
|
||||
for (final Action action : Action.values()) {
|
||||
member.act(action);
|
||||
verify(this.stdOutMock).println(member.toString() + " " + action.toString());
|
||||
verify(party).act(member, action);
|
||||
}
|
||||
|
||||
verifyNoMoreInteractions(party, this.stdOutMock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if {@link PartyMember#toString()} generate the expected output
|
||||
*/
|
||||
@Test
|
||||
public void testToString() throws Exception {
|
||||
final PartyMember member = this.memberSupplier.get();
|
||||
final Class<? extends PartyMember> memberClass = member.getClass();
|
||||
assertEquals(memberClass.getSimpleName(), member.toString());
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user