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 Runnable
y la lógica asociada.
Esto hará que, además de su modo de código comprobable.
Se podría extraer sendRequest()
en una Foo
clase que la Processor
clase depende. Entonces usted tiene sólo para burlarse de esta Foo
clase 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(...);
}