Added proper tests for half-sync-half-async
This commit is contained in:
		@@ -14,5 +14,10 @@
 | 
			
		||||
      <artifactId>junit</artifactId>
 | 
			
		||||
      <scope>test</scope>
 | 
			
		||||
    </dependency>
 | 
			
		||||
    <dependency>
 | 
			
		||||
      <groupId>org.mockito</groupId>
 | 
			
		||||
      <artifactId>mockito-core</artifactId>
 | 
			
		||||
      <scope>test</scope>
 | 
			
		||||
    </dependency>
 | 
			
		||||
  </dependencies>
 | 
			
		||||
</project>
 | 
			
		||||
 
 | 
			
		||||
@@ -50,6 +50,7 @@ public class AsynchronousService {
 | 
			
		||||
      task.onPreCall();
 | 
			
		||||
    } catch (Exception e) {
 | 
			
		||||
      task.onError(e);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    service.submit(new FutureTask<T>(task) {
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,79 @@
 | 
			
		||||
package com.iluwatar.halfsynchalfasync;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.mockito.InOrder;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.concurrent.LinkedBlockingQueue;
 | 
			
		||||
 | 
			
		||||
import static org.mockito.Matchers.eq;
 | 
			
		||||
import static org.mockito.Mockito.doThrow;
 | 
			
		||||
import static org.mockito.Mockito.inOrder;
 | 
			
		||||
import static org.mockito.Mockito.mock;
 | 
			
		||||
import static org.mockito.Mockito.timeout;
 | 
			
		||||
import static org.mockito.Mockito.times;
 | 
			
		||||
import static org.mockito.Mockito.verify;
 | 
			
		||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
 | 
			
		||||
import static org.mockito.Mockito.when;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Date: 12/12/15 - 11:15 PM
 | 
			
		||||
 *
 | 
			
		||||
 * @author Jeroen Meulemeester
 | 
			
		||||
 */
 | 
			
		||||
public class AsynchronousServiceTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testPerfectExecution() throws Exception {
 | 
			
		||||
    final AsynchronousService service = new AsynchronousService(new LinkedBlockingQueue<>());
 | 
			
		||||
    final AsyncTask<Object> task = mock(AsyncTask.class);
 | 
			
		||||
    final Object result = new Object();
 | 
			
		||||
    when(task.call()).thenReturn(result);
 | 
			
		||||
    service.execute(task);
 | 
			
		||||
 | 
			
		||||
    verify(task, timeout(2000)).onPostCall(eq(result));
 | 
			
		||||
 | 
			
		||||
    final InOrder inOrder = inOrder(task);
 | 
			
		||||
    inOrder.verify(task, times(1)).onPreCall();
 | 
			
		||||
    inOrder.verify(task, times(1)).call();
 | 
			
		||||
    inOrder.verify(task, times(1)).onPostCall(eq(result));
 | 
			
		||||
 | 
			
		||||
    verifyNoMoreInteractions(task);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testCallException() throws Exception {
 | 
			
		||||
    final AsynchronousService service = new AsynchronousService(new LinkedBlockingQueue<>());
 | 
			
		||||
    final AsyncTask<Object> task = mock(AsyncTask.class);
 | 
			
		||||
    final IOException exception = new IOException();
 | 
			
		||||
    when(task.call()).thenThrow(exception);
 | 
			
		||||
    service.execute(task);
 | 
			
		||||
 | 
			
		||||
    verify(task, timeout(2000)).onError(eq(exception));
 | 
			
		||||
 | 
			
		||||
    final InOrder inOrder = inOrder(task);
 | 
			
		||||
    inOrder.verify(task, times(1)).onPreCall();
 | 
			
		||||
    inOrder.verify(task, times(1)).call();
 | 
			
		||||
    inOrder.verify(task, times(1)).onError(exception);
 | 
			
		||||
 | 
			
		||||
    verifyNoMoreInteractions(task);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testPreCallException() throws Exception {
 | 
			
		||||
    final AsynchronousService service = new AsynchronousService(new LinkedBlockingQueue<>());
 | 
			
		||||
    final AsyncTask<Object> task = mock(AsyncTask.class);
 | 
			
		||||
    final IllegalStateException exception = new IllegalStateException();
 | 
			
		||||
    doThrow(exception).when(task).onPreCall();
 | 
			
		||||
    service.execute(task);
 | 
			
		||||
 | 
			
		||||
    verify(task, timeout(2000)).onError(eq(exception));
 | 
			
		||||
 | 
			
		||||
    final InOrder inOrder = inOrder(task);
 | 
			
		||||
    inOrder.verify(task, times(1)).onPreCall();
 | 
			
		||||
    inOrder.verify(task, times(1)).onError(exception);
 | 
			
		||||
 | 
			
		||||
    verifyNoMoreInteractions(task);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user