Como prueba de la clase que implementa Ejecutable con Junit

HenlenLee:

Tengo una clase implementa Runnable como esto

  public Processor implements Runnable{

  public void run() {
     while (true) {
     //some code
     sendRequest(object);
      }
   }
}

 public void sendRequest(Object, object){
 // do something to send the event
  }
}

Y en otra clase de pre-carga. yo suelo

Processor processor = new Processor();
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(processor)

Así que mi pregunta es ¿cómo puede se llama o no el método de ensayo sendRequest unidad?

davidxxx:

Separar las preocupaciones: el Runnabley la lógica asociada.
Esto hará que, además de su modo de código comprobable.
Se podría extraer sendRequest()en una Fooclase que la Processorclase depende. Entonces usted tiene sólo para burlarse de esta Fooclase en su prueba y verificar que el sendRequest()método se invoca.

Por ejemplo :

 public Processor implements Runnable{

  private Foo foo;

  public Processor(Foo foo){
    this.foo = foo;
  }

  public void run() {
     while (true) {
       //some code
       foo.sendRequest(object);
     }
   }
}

Y la prueba:

@Mock
Foo fooMock;

@Test
public void run() {
    Processor processor = new Processor(fooMock);
    ExecutorService executor = Executors.newCachedThreadPool();
    executor.execute(processor);
    executor.awaitTermination(someTime, TimeUnit.SECONDS);
    Mockito.verify(fooMock).sendRequest(...);   
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=178388&siteId=1
Recomendado
Clasificación