diff --git a/async-method-invocation/pom.xml b/async-method-invocation/pom.xml
index be6aa3bca..de81eb0b7 100644
--- a/async-method-invocation/pom.xml
+++ b/async-method-invocation/pom.xml
@@ -14,5 +14,10 @@
       junit
       test
     
+    
+      org.mockito
+      mockito-core
+      test
+    
   
 
diff --git a/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutorTest.java b/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutorTest.java
new file mode 100644
index 000000000..7db0abfce
--- /dev/null
+++ b/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutorTest.java
@@ -0,0 +1,301 @@
+package com.iluwatar.async.method.invocation;
+
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Matchers;
+
+import java.util.Optional;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+import static org.mockito.internal.verification.VerificationModeFactory.times;
+
+/**
+ * Date: 12/6/15 - 10:49 AM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class ThreadAsyncExecutorTest {
+
+	/**
+	 * Test used to verify the happy path of {@link ThreadAsyncExecutor#startProcess(Callable)}
+	 */
+	@Test(timeout = 3000)
+	public void testSuccessfulTaskWithoutCallback() throws Exception {
+		// Instantiate a new executor and start a new 'null' task ...
+		final ThreadAsyncExecutor executor = new ThreadAsyncExecutor();
+
+		final Object result = new Object();
+		final Callable