### Question:
Listener1Assist implements ListenerAssist,
        ListenerModelHandler.ModelCreator<Listener1Assist.Listener1Model> { public void fetchProgress(DownloadTask task, long increaseBytes) { final Listener1Model model = modelHandler.getOrRecoverModel(task, task.getInfo()); if (model == null) return; model.currentOffset.addAndGet(increaseBytes); if (callback != null) callback.progress(task, model.currentOffset.get(), model.totalLength); } Listener1Assist();   Listener1Assist(ListenerModelHandler<Listener1Model> handler); void setCallback(@NonNull Listener1Callback callback); void taskStart(DownloadTask task); void taskEnd(DownloadTask task, EndCause cause, @Nullable Exception realCause); void downloadFromBeginning(DownloadTask task,
                                      @NonNull BreakpointInfo info,
                                      ResumeFailedCause cause); void downloadFromBreakpoint(DownloadTask task, @NonNull BreakpointInfo info); void connectEnd(DownloadTask task); void fetchProgress(DownloadTask task, long increaseBytes); @Override boolean isAlwaysRecoverAssistModel(); @Override void setAlwaysRecoverAssistModel(boolean isAlwaysRecoverAssistModel); @Override void setAlwaysRecoverAssistModelIfNotSet(boolean isAlwaysRecoverAssistModel); @Override Listener1Model create(int id);  }### Answer:
@Test public void fetchProgress() { when(handler.getOrRecoverModel(task, info)).thenReturn(null); assist.fetchProgress(task, 1); verify(callback, never()).progress(eq(task), anyLong(), anyLong()); final Listener1Assist.Listener1Model model = new Listener1Assist.Listener1Model(1); model.currentOffset.set(2); model.totalLength = 3; when(handler.getOrRecoverModel(task, info)).thenReturn(model); assist.fetchProgress(task, 1); verify(callback).progress(eq(task), eq(2L + 1L), eq(3L)); }