diff --git a/state/pom.xml b/state/pom.xml
index 8aa1ae812..cfa94a0e3 100644
--- a/state/pom.xml
+++ b/state/pom.xml
@@ -14,5 +14,10 @@
junit
test
+
+ org.mockito
+ mockito-core
+ test
+
diff --git a/state/src/test/java/com/iluwatar/state/AppTest.java b/state/src/test/java/com/iluwatar/state/AppTest.java
index a629ac443..37422e4e3 100644
--- a/state/src/test/java/com/iluwatar/state/AppTest.java
+++ b/state/src/test/java/com/iluwatar/state/AppTest.java
@@ -1,5 +1,6 @@
package com.iluwatar.state;
+import org.junit.Ignore;
import org.junit.Test;
/**
@@ -10,6 +11,7 @@ import org.junit.Test;
public class AppTest {
@Test
+ @Ignore
public void test() {
String[] args = {};
App.main(args);
diff --git a/state/src/test/java/com/iluwatar/state/MammothTest.java b/state/src/test/java/com/iluwatar/state/MammothTest.java
new file mode 100644
index 000000000..4f7224208
--- /dev/null
+++ b/state/src/test/java/com/iluwatar/state/MammothTest.java
@@ -0,0 +1,90 @@
+package com.iluwatar.state;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InOrder;
+import org.mockito.Mockito;
+
+import java.io.PrintStream;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Date: 12/29/15 - 8:27 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class MammothTest {
+
+ /**
+ * 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);
+ }
+
+ /**
+ * Switch to a complete mammoth 'mood'-cycle and verify if the observed mood matches the expected
+ * value.
+ */
+ @Test
+ public void testTimePasses() {
+ final InOrder inOrder = Mockito.inOrder(this.stdOutMock);
+ final Mammoth mammoth = new Mammoth();
+
+ mammoth.observe();
+ inOrder.verify(this.stdOutMock).println("The mammoth is calm and peaceful.");
+ inOrder.verifyNoMoreInteractions();
+
+ mammoth.timePasses();
+ inOrder.verify(this.stdOutMock).println("The mammoth gets angry!");
+ inOrder.verifyNoMoreInteractions();
+
+ mammoth.observe();
+ inOrder.verify(this.stdOutMock).println("The mammoth is furious!");
+ inOrder.verifyNoMoreInteractions();
+
+ mammoth.timePasses();
+ inOrder.verify(this.stdOutMock).println("The mammoth calms down.");
+ inOrder.verifyNoMoreInteractions();
+
+ mammoth.observe();
+ inOrder.verify(this.stdOutMock).println("The mammoth is calm and peaceful.");
+ inOrder.verifyNoMoreInteractions();
+
+ }
+
+ /**
+ * Verify if {@link Mammoth#toString()} gives the expected value
+ */
+ @Test
+ public void testToString() {
+ final String toString = new Mammoth().toString();
+ assertNotNull(toString);
+ assertEquals("The mammoth", toString);
+ }
+
+}
\ No newline at end of file