Pregunta

Estoy escribiendo un caso de prueba JUnit para un DSL y necesito asegurarme de que el método bajo prueba nunca termine (como en esta pregunta).

El solución proporcionada está bien, pero me gustaría usar el "nuevo" Interfaz de ejecutor (Java 5.0 en adelante):

@Test
public void methodDoesNotReturnFor5Seconds() throws Exception {
  Thread t = new Thread(new Runnable() {
    public void run() {
      methodUnderTest();
    }
  });
  t.start();
  t.join(5000);
  assertTrue(t.isAlive());
  // possibly do something to shut down methodUnderTest
}

¿Cómo puedo traducir el código anterior del "antiguo"? Thread/Runnable interfaz con lo "nuevo" ExecutorService/Executor ¿interfaz?

¿Fue útil?

Solución

Future<?> future = Executors.newSingleThreadExecutor().submit(new Runnable() {
    public void run() {
        methodUnderTest();
    } 
});
try {
    future.get(5, TimeUnit.SECONDS);
    fail("The task has completed before 5 seconds");
}
catch (TimeoutException e) {
    // expected
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top