diff --git a/private-class-data/pom.xml b/private-class-data/pom.xml
index cced926fc..856934acd 100644
--- a/private-class-data/pom.xml
+++ b/private-class-data/pom.xml
@@ -14,5 +14,10 @@
junit
test
+
+ org.mockito
+ mockito-core
+ test
+
diff --git a/private-class-data/src/test/java/com/iluwatar/privateclassdata/ImmutableStewTest.java b/private-class-data/src/test/java/com/iluwatar/privateclassdata/ImmutableStewTest.java
new file mode 100644
index 000000000..da5335b0f
--- /dev/null
+++ b/private-class-data/src/test/java/com/iluwatar/privateclassdata/ImmutableStewTest.java
@@ -0,0 +1,52 @@
+package com.iluwatar.privateclassdata;
+
+import org.junit.Test;
+import org.mockito.InOrder;
+
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.verify;
+
+/**
+ * Date: 12/27/15 - 10:46 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class ImmutableStewTest extends StdOutTest {
+
+ /**
+ * Verify if mixing the stew doesn't change the internal state
+ */
+ @Test
+ public void testMix() {
+ final Stew stew = new Stew(1, 2, 3, 4);
+ final String message = "Mixing the stew we find: 1 potatoes, 2 carrots, 3 meat and 4 peppers";
+
+ final InOrder inOrder = inOrder(getStdOutMock());
+ for (int i = 0; i < 20; i++) {
+ stew.mix();
+ inOrder.verify(getStdOutMock()).println(message);
+ }
+
+ inOrder.verifyNoMoreInteractions();
+ }
+
+ /**
+ * Verify if tasting the stew actually removes one of each ingredient
+ */
+ @Test
+ public void testDrink() {
+ final Stew stew = new Stew(1, 2, 3, 4);
+ stew.mix();
+
+ verify(getStdOutMock())
+ .println("Mixing the stew we find: 1 potatoes, 2 carrots, 3 meat and 4 peppers");
+
+ stew.taste();
+ verify(getStdOutMock()).println("Tasting the stew");
+
+ stew.mix();
+ verify(getStdOutMock())
+ .println("Mixing the stew we find: 0 potatoes, 1 carrots, 2 meat and 3 peppers");
+
+ }
+}
\ No newline at end of file
diff --git a/private-class-data/src/test/java/com/iluwatar/privateclassdata/StdOutTest.java b/private-class-data/src/test/java/com/iluwatar/privateclassdata/StdOutTest.java
new file mode 100644
index 000000000..91904c31c
--- /dev/null
+++ b/private-class-data/src/test/java/com/iluwatar/privateclassdata/StdOutTest.java
@@ -0,0 +1,53 @@
+package com.iluwatar.privateclassdata;
+
+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/private-class-data/src/test/java/com/iluwatar/privateclassdata/StewTest.java b/private-class-data/src/test/java/com/iluwatar/privateclassdata/StewTest.java
new file mode 100644
index 000000000..d6b67a35e
--- /dev/null
+++ b/private-class-data/src/test/java/com/iluwatar/privateclassdata/StewTest.java
@@ -0,0 +1,33 @@
+package com.iluwatar.privateclassdata;
+
+import org.junit.Test;
+import org.mockito.InOrder;
+
+import static org.mockito.Mockito.inOrder;
+
+/**
+ * Date: 12/27/15 - 10:46 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class StewTest extends StdOutTest {
+
+ /**
+ * Verify if mixing the stew doesn't change the internal state
+ */
+ @Test
+ public void testMix() {
+ final ImmutableStew stew = new ImmutableStew(1, 2, 3, 4);
+ final String expectedMessage = "Mixing the immutable stew we find: 1 potatoes, " +
+ "2 carrots, 3 meat and 4 peppers";
+
+ final InOrder inOrder = inOrder(getStdOutMock());
+ for (int i = 0; i < 20; i++) {
+ stew.mix();
+ inOrder.verify(getStdOutMock()).println(expectedMessage);
+ }
+
+ inOrder.verifyNoMoreInteractions();
+ }
+
+}
\ No newline at end of file