在我的android项目中,在我的主持人中,我正在一个Runnable匿名类中运行一个后台线程,该匿名线程将对主持人类成员的更改应用。当线程结束时,它将调用回调。 有没有人举过一个在外部类中应用更改的可运行匿名类模拟示例?
答案 0 :(得分:0)
您好Jeff Bowman和user8035311,
首先,非常感谢您的快速答复。
第二,我时间很紧,所以我无法发布我的代码。
要回答我的问题,我必须重构代码并减少类之间的耦合(这很糟糕)。
所以,让我向您展示冲突部分:
@Override
public void onResponse(final PresentationModel presentationModel) {
presentationModelWrapper.clear();
presentationModelWrapper.add(presentationModel);
if(isViewAttached()){
final SomeHandler someHandler = view.getSomeHandler();
someHandler.execute(new Runnable() {
@Override
public void run() {
//some code here
}
});
}
}
someHandler的执行结束时,我调用回调函数,该回调函数调用演示者的方法。 现在,让我向您展示我的解决方案:
@Mock
private SomeContract.View view;
@Mock
private SomeHandler someHandler;
@Captor
private ArgumentCaptor<SomeCallback> somethingCallbackArgumentCaptor;
@InjectMocks
private SomePresenter presenter;
@Test
public void loadSomething_shouldShowSomething() {
// Given
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(Constant.API_PARAMETER_QUERY, CUSTOM_QUERY);
// Given a stubbed model
model = new PresentationModel();
//when
presenter.loadSomething(parameters);
//This part mock the someInteractor call
when(view.getSomeHandler()).thenReturn(someHandler);
verify(someInteractor).execute(anyMap(), somethingCallbackArgumentCaptor.capture());
somethingCallbackArgumentCaptor.getValue().onResponse(model);
//we are on response my conflictive part
verify(someHandler).execute(any(Runnable.class));
//I use presenter instead of ArgumentCaptor because handler has a presenter reference
presenter.onDatabaseOperationFinished();
// Then
SomethingUI uiModel = presenter.getUiModel();
verify(view).showSomething(uiModel);
}
我真的希望这对某人有用。
Francisco。