Я пытаюсь выполнить модульное тестирование метода, который имеет вызов Thread.sleep.
public Boolean waitForUpscale(){
String res = someObject.upTheResources();
Thread.sleep(20000);
Boolean status = someObject.checkForStatus();
return status;
}
Во время тестирования этого теста также спит из-за Thread.sleep
При тестировании я должен избегать перехода в спящий режим.
ОБНОВЛЕНИЕ:
Я добавил этот тест:
@Test
public void downscaleTest() throws Exception {
when(someservice.downScaleResources()).thenReturn("DONE");
PowerMockito.mockStatic(Thread.class);
doNothing().when(Thread.class, "sleep", anyLong());
Boolean res = Whitebox.invokeMethod(myController, "downscaleALL");
assertTrue(res);
}
Когда я отлаживаю это, это работает. Но когда я запускаю тест в обычном режиме, он терпит неудачу, выдавая следующее исключение:
0 matchers expected, 1 recorded:
-> at com.mypackage.controller.MyController.downscaleALL(MyControllerTest.java:265)
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
For more info see javadoc for Matchers class.
Добавление метода downScaleAll
private Boolean downscaleALL() {
try {
String downScaleResources = someservice.downScaleResources();
if (downScaleResources.equals("DONE")) {
Thread.sleep(20000); // 20s
log.info("DOWNSCALING THE RESOURCES NOW");
return true;
}
return false;
} catch (Exception e) {
log.error("Error while downscaling the resources");
log.error(e.toString());
return false;
}
}