diff --git a/prototype/pom.xml b/prototype/pom.xml
index 5e91880a6..93b162b20 100644
--- a/prototype/pom.xml
+++ b/prototype/pom.xml
@@ -14,5 +14,10 @@
junit
test
+
+ org.mockito
+ mockito-core
+ test
+
diff --git a/prototype/src/test/java/com/iluwatar/prototype/HeroFactoryImplTest.java b/prototype/src/test/java/com/iluwatar/prototype/HeroFactoryImplTest.java
new file mode 100644
index 000000000..e237b43b7
--- /dev/null
+++ b/prototype/src/test/java/com/iluwatar/prototype/HeroFactoryImplTest.java
@@ -0,0 +1,39 @@
+package com.iluwatar.prototype;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+/**
+ * Date: 12/28/15 - 8:34 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class HeroFactoryImplTest {
+
+ @Test
+ public void testFactory() throws Exception {
+ final Mage mage = mock(Mage.class);
+ final Warlord warlord = mock(Warlord.class);
+ final Beast beast = mock(Beast.class);
+
+ when(mage.clone()).thenThrow(CloneNotSupportedException.class);
+ when(warlord.clone()).thenThrow(CloneNotSupportedException.class);
+ when(beast.clone()).thenThrow(CloneNotSupportedException.class);
+
+ final HeroFactoryImpl factory = new HeroFactoryImpl(mage, warlord, beast);
+ assertNull(factory.createMage());
+ assertNull(factory.createWarlord());
+ assertNull(factory.createBeast());
+
+ verify(mage).clone();
+ verify(warlord).clone();
+ verify(beast).clone();
+ verifyNoMoreInteractions(mage, warlord, beast);
+ }
+
+}
\ No newline at end of file
diff --git a/prototype/src/test/java/com/iluwatar/prototype/PrototypeTest.java b/prototype/src/test/java/com/iluwatar/prototype/PrototypeTest.java
new file mode 100644
index 000000000..3e3d8f88b
--- /dev/null
+++ b/prototype/src/test/java/com/iluwatar/prototype/PrototypeTest.java
@@ -0,0 +1,66 @@
+package com.iluwatar.prototype;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
+
+/**
+ * Date: 12/28/15 - 8:45 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+@RunWith(Parameterized.class)
+public class PrototypeTest
{
+
+ @Parameterized.Parameters
+ public static Collection