У меня есть метод, который делает вызов API через 1 сек.Я использую Handler.postdelayed для реализации этого.Теперь я пытаюсь проверить, выполняется ли вызов API с помощью модульного теста.
@Mock
private PlanRepository planRepository;
@Mock
private CreatePlanContract.View view;
private CreatePlanContract.Presenter presenter;
@Captor
private ArgumentCaptor<ListResponseCallback<IntersectingList>> listCaptor;
....
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
presenter = new CreatePlanPresenter(resourceProvider, sessionContext, planRepository);
presenter.start();
presenter.setView(view);
...
}
@Test
public void testOnCameraIdleGetListEnabled(){
presenter.onCameraIdle(true);
verify(planRepository,times(1))
.getList(listCaptor.capture());
}
Это метод в Presenter, который я хочу проверить:
class PlanPresenter implements PlanContract.Presenter{
private Handler mHandler = new Handler();
private Runnable mRunnable = this::fetchList;
private WeakReference<CreatePlanContract.View> createPlanView;
private ListResponseCallback<IntersectingList> listListener = new ListResponseCallback<Intersectinglist>() {
@Override
public void onSuccess(@NonNull List<IntersectingList> list) {
Log.d(TAG, "callback: success resp came");
if(createPlanView.get() != null)
createPlanView.get().renderList(list);
}
@Override
public void onError(int i, @NonNull String s, @NonNull APIResponseBody apiResponseBody, @Nullable Exception e) {
Log.d(TAG, "callback: error resp came Auth");
}
};
@Override
public void start() {
//some initilizations
}
@Override
public void setView(@NonNull CreatePlanContract.View view) {
this.createPlanView = new WeakReference<>(view);
}
@Override
public void onCameraIdle(){
mHandler.postDelayed(mRunnable,1000);
}
private void fetchList(){
//this the method to be verified
planRepository.getList(listListener);
}
}
Но так каквызов API делается через 1 секунду, тест не пройден.
То, что я пробовал: я пытался перейти по этой ссылке и использовать doAnswer (), но мне не удалось.Я подумал об использовании thread.sleep (), который кажется ужасным подходом к этой проблеме (также читал, что это плохой подход)
PS: я новичок в тестировании.Я использую JUnit 4 и mockito