@Test(timeout = 100L)
public void Should_executeItselfOnNewThreadIfCanGetOne()
        throws Exception {

    ITask taskMock = mock(ITask.class);
    ExecutionTask executionTask = new ExecutionTask(dispatcherMock);
    when(dispatcherMock.getExecutionTask()).thenReturn(executionTask);
    when(queueMock.tryTake())
            .thenReturn(taskMock)
            .thenReturn(null);
    when(threadPoolMock.tryExecute(same(executionTask)))
            .thenReturn(true)
            .thenReturn(false);
    executionTask.execute();
    verify(taskMock).execute();
    verify(threadPoolMock).tryExecute(same(executionTask));
}