У меня есть фрагмент (фрагмент реализует 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);
}
});
}