Я пытаюсь протестировать свое приложение с помощью Mockito.Он построен с использованием шаблона MVP.Это мой контракт:
public interface CityContract {
interface View {
void setData(String data);
}
interface Presenter {
boolean isViewAttached();
}
interface Model {
void getResponse(CityModel.DataCallback callback);
}
}
Это мой вид:
public class CityActivity extends AppCompatActivity implements CityContract.View {
private CityPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_city);
CityModel cityModel = new CityModel(city);
presenter = new CityPresenter(cityModel);
}
@Override
public void setData(String data) {
if (presenter.isViewAttached()) {
dataTextView.setText(data);
}
}
}
Это мой ведущий:
public class CityPresenter implements CityContract.Presenter, CityModel.DataCallback {
private CityModel cityModel;
private CityContract.View view;
private Data data;
public CityPresenter(CityModel cityModel) {
this.cityModel = cityModel;
cityModel.getResponse(this);
}
@Override
public boolean isViewAttached() {/* ... */}
@Override
public void onResponse(Data data) {
this.data = data;
setData(data.getData());
}
public Data getData() {
return data;
}
private void setData(String data) {
view.setData(data);
}
}
Это моя модель:
public class CityModel implements CityContract.Model {
private City city;
public CityModel(City city) {
this.city = city;
}
public void getResponse(DataCallback callback) {
Callback<Data> dataCallback = new Callback<Data>() {
@Override
public void onResponse(@NonNull Call<Data> call, @NonNull Response<Data> response) {
if (response.isSuccessful()) {
Data data = response.body();
callback.onResponse(data);
}
}
};
}
public interface DataCallback {
void onResponse(Data data);
}
}
И это мой тестовый класс, пожалуйста, посмотрите, что я пробовал до сих пор:
@RunWith(MockitoJUnitRunner.class)
public class CityPresenterTest {
private CityPresenter cityPresenter;
@Mock
private CityModel cityModel;
@Mock
private Data data;
@Mock
private CityModel.DataCallback callback;
@Before
public void setUp() {
cityPresenter = new CityPresenter(cityModel);
}
@Test
public void dataAsyncValidator() {
doAnswer(invocation -> {
((CityModel.DataCallback) invocation.getArguments()[0]).onResponse(data);
return null;
}).when(cityModel).getResponse(any(CityModel.DataCallback.class));
}
}
Я сделал синхронный ответ для обратного вызова.Но как добиться асинхронной части?Заранее спасибо!