Как написать тестовый блок для фрагмента, не заботясь о вызове метода void презентатора - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть фрагмент (фрагмент реализует PresenterContract.View). В onCreate() фрагмента я вызываю презентатора по имени FragmentPresenter(implementing PresenterContract.Presenter) void метод fetchData() используя presenterContract.fetchData(), который выполняет сетевой вызов с использованием Rx, и из onNext() я перезваниваю фрагмент setLayoutFields(Data data), используя *contractView.setLayoutFields(mData)* и инициализирую все текстовые поля и нажатие кнопки фрагмента, используя эти данные , Теперь я хочу написать контрольные примеры для фрагмента.

Теперь, начиная с onCreate(); Я также создаю экземпляр объекта презентатора, поэтому вызывается реальный метод презентатора, который не соответствует назначению. Итак, как мне проверить это, не касаясь того, что делает Presenter и выдавая фиктивные данные для setLayoutFields()? Не следует ли создавать экземпляр ссылочной переменной PresenterContract.Presenter presenterContract; внутри onCreate(), используя presenterContract = new FragmentPresenter(this);.

Пожалуйста, предложите написать контрольный пример для моего фрагмента.

public class MyFragment extends Fragment implements PresenterContract.View {
    PresenterContract.Presenter presenterContract;

    //........ inside onCreate()
    presenterContract =new FragmentPresenter(this);
    presenterContract.fetchData();
   //.... onCreate finished
    .
    .
    .
    public void setLayoutFields(Data data) {
        merchantNameTv.setText(data.merchantName());
       merchantBalanceTv.setText(data.amountBalance());

    }
}

public interface PresenterContract{
    public interface View {
        void setLayoutFieds(Data data);
    }
    public interface Presenter {
        void fetchData();
    }
}


public class FragmentPresenter implements PresenterContract.Presenter {

    private PresenterContract.View mView;
    public void FragmentPresenter(PresenterContract.View view){
        mView = view;
    }

    public void fetchData(){
       // .........  network call and data returned to fragment
    observable.subscribe(new Observer<Data>() {
       @Override public void onCompleted() {
           Log.d("Test", "In onCompleted()");
       }

       @Override public void onError(Throwable e) {
           Log.d("Test", "In onError()");
       }

       @Override public void onNext(Data data) {
            mView.setLayoutFields(data);
       }
    });
}
...