Chcę przetestować, że niektóre metody zostaną odwołane w przypadku niepowodzenia. Wywołanie wykonywane w oddzielnym wątku. Tak więc piszę taki kod:Używanie easymock w wielowątkowości
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);
Test zostanie zaliczony. Ale nie wdrożyłem jeszcze odwołania.
zrobić test nie powiedzie, Wymieniłem
mock.bar();
expectLastCall().andThrow(new RuntimeException("TEST EXCEPTION"));
z
mock.bar();
expectLastCall().andAnswer(new IAnswer<Void>() {
@Override
public Void answer() throws Throwable {
sleepSomeTime();
throw new RuntimeException("TEST EXCEPTION");
}
});
Ale nie podoba mi się dodanie sleepSomeTime wokół moich testów. Poza tym, tak naprawdę nie rozumiem, gdy pomaga w tym konkretnym przypadku. Tak,
Dlaczego dodawanie opóźnienia pomogło?
Jaki jest właściwy sposób na takie rzeczy?
To najlepsza odpowiedź. Uważam jednak, że należy to zrobić bez zamków. –
W zależności od kodu, możesz przechwycić wywołania zwrotne, więc metody weryfikacji są wykonywane w wywołaniu zwrotnym, które łaskocze w ostatniej linii próbnej. –