Mam test JUnit, który chcę synchronicznie odczekać przez pewien okres czasu. Mój test JUnit wygląda następująco:
@Test
public void testExipres(){
SomeCacheObject sco = new SomeCacheObject();
sco.putWithExipration("foo", 1000);
// WAIT FOR 2 SECONDS
assertNull(sco.getIfNotExipred("foo"));
}
Próbowałem Thread.currentThread().wait()
, ale zgłasza wyjątek IllegalMonitorStateException (zgodnie z oczekiwaniami).
Czy jest w tym jakaś sztuczka, czy potrzebuję innego monitora?
Thread.sleep
mówiąc, że używanie Thread.sleep w teście jest ogólnie złym pomysłem. Tworzy kruche testy, które mogą zakończyć się niepowodzeniem w nieprzewidywalny sposób, w zależności od środowiska („Pasuje na moim komputerze”) lub obciążenia. Nie polegaj na synchronizacji (używaj makiet) ani nie używaj bibliotek, takich jak Awaitility, do testowania asynchronicznego.