在Outterclass中应用更改的Runnable匿名类模拟的示例?

时间:2018-06-29 13:49:56

标签: android mockito runnable

在我的android项目中,在我的主持人中,我正在一个Runnable匿名类中运行一个后台线程,该匿名线程将对主持人类成员的更改应用。当线程结束时,它将调用回调。 有没有人举过一个在外部类中应用更改的可运行匿名类模拟示例?

1 个答案:

答案 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。