Voglio verificare che alcuni metodi vengano richiamati in caso di errori. Chiamata eseguita in thread separati. Così scrivo codice come questoUtilizzo di easymock nel multithreading
final Foo mock = createStrictMock(Foo.class);
mock.bar();
expectLastCall().andThrow(new RuntimeException("TEST EXCEPTION"));
mock.bar();
replay(mock);
doStuff();
sleepSomeTime(); //Pretty dirty. But I need to test it in multithreading.
verify(mock);
E test superato. Ma non ho ancora implementato il richiamo.
Per effettuare test di fallire, ho sostituito
mock.bar();
expectLastCall().andThrow(new RuntimeException("TEST EXCEPTION"));
con
mock.bar();
expectLastCall().andAnswer(new IAnswer<Void>() {
@Override
public Void answer() throws Throwable {
sleepSomeTime();
throw new RuntimeException("TEST EXCEPTION");
}
});
Ma non mi piace l'aggiunta di sleepSomeTime tutto intorno i miei test. Oltre a ciò, in realtà non capisco mentre aiuta in questo caso particolare. Quindi,
Perché aggiungere ritardo è stato utile?
Quale è il modo giusto per fare queste cose?
È la migliore risposta. Ma credo che questo dovrebbe essere fatto senza serrature. –
A seconda del codice, è possibile agganciare le richiamate in modo che i metodi di verifica vengano eseguiti in una richiamata che si solletica nell'ultima riga della propria simulazione. –