diff --git a/proxy/pom.xml b/proxy/pom.xml
index 3a662b37a..77b6a04bf 100644
--- a/proxy/pom.xml
+++ b/proxy/pom.xml
@@ -14,5 +14,10 @@
junit
test
+
+ org.mockito
+ mockito-core
+ test
+
diff --git a/proxy/src/test/java/com/iluwatar/proxy/StdOutTest.java b/proxy/src/test/java/com/iluwatar/proxy/StdOutTest.java
new file mode 100644
index 000000000..a145b7b80
--- /dev/null
+++ b/proxy/src/test/java/com/iluwatar/proxy/StdOutTest.java
@@ -0,0 +1,53 @@
+package com.iluwatar.proxy;
+
+import org.junit.After;
+import org.junit.Before;
+
+import java.io.PrintStream;
+
+import static org.mockito.Mockito.mock;
+
+/**
+ * Date: 12/10/15 - 8:37 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public abstract class StdOutTest {
+
+ /**
+ * The mocked standard out {@link PrintStream}, required since some actions don't have any
+ * influence on 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);
+ }
+
+ /**
+ * Get the mocked stdOut {@link PrintStream}
+ *
+ * @return The stdOut print stream mock, renewed before each test
+ */
+ final PrintStream getStdOutMock() {
+ return this.stdOutMock;
+ }
+
+}
diff --git a/proxy/src/test/java/com/iluwatar/proxy/WizardTest.java b/proxy/src/test/java/com/iluwatar/proxy/WizardTest.java
new file mode 100644
index 000000000..c1b9e6fed
--- /dev/null
+++ b/proxy/src/test/java/com/iluwatar/proxy/WizardTest.java
@@ -0,0 +1,22 @@
+package com.iluwatar.proxy;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Date: 12/28/15 - 9:02 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class WizardTest {
+
+ @Test
+ public void testToString() throws Exception {
+ final String[] wizardNames = {"Gandalf", "Dumbledore", "Oz", "Merlin"};
+ for (final String name : wizardNames) {
+ assertEquals(name, new Wizard(name).toString());
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/proxy/src/test/java/com/iluwatar/proxy/WizardTowerProxyTest.java b/proxy/src/test/java/com/iluwatar/proxy/WizardTowerProxyTest.java
new file mode 100644
index 000000000..f4deb192e
--- /dev/null
+++ b/proxy/src/test/java/com/iluwatar/proxy/WizardTowerProxyTest.java
@@ -0,0 +1,38 @@
+package com.iluwatar.proxy;
+
+import org.junit.Test;
+import org.mockito.InOrder;
+
+import static org.mockito.Mockito.inOrder;
+
+/**
+ * Date: 12/28/15 - 9:18 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class WizardTowerProxyTest extends StdOutTest {
+
+ @Test
+ public void testEnter() throws Exception {
+ final Wizard[] wizards = new Wizard[]{
+ new Wizard("Gandalf"),
+ new Wizard("Dumbledore"),
+ new Wizard("Oz"),
+ new Wizard("Merlin")
+ };
+
+ final WizardTowerProxy tower = new WizardTowerProxy();
+ for (final Wizard wizard : wizards) {
+ tower.enter(wizard);
+ }
+
+ final InOrder inOrder = inOrder(getStdOutMock());
+ inOrder.verify(getStdOutMock()).println("Gandalf enters the tower.");
+ inOrder.verify(getStdOutMock()).println("Dumbledore enters the tower.");
+ inOrder.verify(getStdOutMock()).println("Oz enters the tower.");
+ inOrder.verify(getStdOutMock()).println("Merlin is not allowed to enter!");
+ inOrder.verifyNoMoreInteractions();
+
+ }
+
+}
\ No newline at end of file
diff --git a/proxy/src/test/java/com/iluwatar/proxy/WizardTowerTest.java b/proxy/src/test/java/com/iluwatar/proxy/WizardTowerTest.java
new file mode 100644
index 000000000..5ddb7ddac
--- /dev/null
+++ b/proxy/src/test/java/com/iluwatar/proxy/WizardTowerTest.java
@@ -0,0 +1,38 @@
+package com.iluwatar.proxy;
+
+import org.junit.Test;
+import org.mockito.InOrder;
+
+import static org.mockito.Mockito.inOrder;
+
+/**
+ * Date: 12/28/15 - 9:18 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class WizardTowerTest extends StdOutTest {
+
+ @Test
+ public void testEnter() throws Exception {
+ final Wizard[] wizards = new Wizard[]{
+ new Wizard("Gandalf"),
+ new Wizard("Dumbledore"),
+ new Wizard("Oz"),
+ new Wizard("Merlin")
+ };
+
+ final WizardTower tower = new WizardTower();
+ for (final Wizard wizard : wizards) {
+ tower.enter(wizard);
+ }
+
+ final InOrder inOrder = inOrder(getStdOutMock());
+ inOrder.verify(getStdOutMock()).println("Gandalf enters the tower.");
+ inOrder.verify(getStdOutMock()).println("Dumbledore enters the tower.");
+ inOrder.verify(getStdOutMock()).println("Oz enters the tower.");
+ inOrder.verify(getStdOutMock()).println("Merlin enters the tower.");
+ inOrder.verifyNoMoreInteractions();
+
+ }
+
+}
\ No newline at end of file