@Test
public void Should_executeTasksOnDifferentThreads()
        throws Exception {

    ITask sleepTask = new SleepingTask();
    ITask task1 = spy(sleepTask), task2 = spy(sleepTask);
    ITask task3 = mock(ITask.class);
    assertTrue(threadPool.tryExecute(task1));
    assertTrue(threadPool.tryExecute(task2));
    // Now there is no more free threads.
    assertFalse(threadPool.tryExecute(task3));
    verify(task1, timeout(200)).execute();
    verify(task1, timeout(100)).execute();
}