Как проверить метод void в Presenter с помощью Mockito? - PullRequest
1 голос
/ 25 июня 2019

У меня очень простое приложение, построенное с использованием шаблона MVP. Это мой контракт:

public interface CitiesContract {
    interface View {
        void addCitiesToList(List<City> cityList);
    }

    interface Presenter {
        void getCityList();
    }

    interface Model {
        List<City> getCityList();
    }
}

Это мой взгляд:

public class CitiesActivity extends AppCompatActivity implements CitiesContract.View {
    private List<City> cityList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cities);

        CitiesPresenter presenter = new CitiesPresenter(this);
        presenter.getCityList();
    }

    @Override
    public void addCitiesToList(List<City> cities) {
        cityList.addAll(cities);
    }
}

Это мой ведущий:

public class CitiesPresenter implements CitiesContract.Presenter {
    private CitiesContract.View view;
    private CitiesModel model;

    public CitiesPresenter(CitiesContract.View view) {
        this.view = view;
        model = new CitiesModel();
    }

    @Override
    public void getCityList() {
        List<City> cityList = model.getCityList();
        view.addCitiesToList(cityList);
    }
}

Это моя модель:

public class CitiesModel implements CitiesContract.Model {
    @Override
    public List<City> getCityList() {
        List<City> cityList = new ArrayList<>();
        //Add 30 cities to the list
        return cityList;
    }
}

Как я могу проверить метод getCityList() в моем Presenter? Это то, что я пробовал до сих пор:

public class CitiesPresenterTest {
    private CitiesContract.Presenter citiesPresenter;
    @Mock
    private CitiesContract.View citiesView;

    public void setUp() {
        MockitoAnnotations.initMocks(this);
        citiesPresenter = new CitiesPresenter(citiesView);
    }

    @Test
    public void getCityListTest() {
        citiesPresenter.getCityList();
        //What to do next???
    }
}

1 Ответ

1 голос
/ 25 июня 2019

Хорошо, это хороший вопрос, кстати. Прежде всего, вы также должны издеваться над моделью. Второе: устроить что-нибудь: например, чтобы model.getCityList() вернул ноль. После этого вы можете проверить с помощью оператора mockitos verify. Пример:

when(model.getCityList()).thenReturn(null);
citiesPresenter.getCityList();
verify(view).addCitiesToList(null);

Другой случай может быть таким же, но с пустым списком:

List<City> citiesList = new ArrayList<>();

when(model.getCityList()).thenReturn(citiesList );
citiesPresenter.getCityList();
verify(view).addCitiesToList(citiesList);

И еще один может быть таким же, с поддельным списком, который вы можете создать самостоятельно, просто чтобы проверить его:

List<City> citiesList = new ArrayList<>();
list.add(City("name", "something else", "i don't know what atributes you have"));

when(model.getCityList()).thenReturn(citiesList );
citiesPresenter.getCityList();
verify(view).addCitiesToList(citiesList);

Надеюсь, я помог.

Дополнительная информация: При модульном тестировании у вас в голове должно быть 3 основных шага: Сначала вы организуете: Итак, вы создаете свой собственный сценарий. Например, что если список пуст. Второе: вы действуете: на этом этапе вы тестируете нужный метод. Третье: Утвердить: здесь вы проверяете или утверждаете, что ваши ожидания совпадают с данным кодом.

...