Модульное тестирование Android

Я пытаюсь протестировать своего докладчика, и мне нужно имитируемое местоположение, однако я получаю нулевое значение или имею значения по умолчанию, такие как 0,0 для широты, долготы, пеленга и т. д.

Я уже пытался создать новый объект Location и инициализировать все нужные мне поля.

    val latitude = 37.422
    val longitude = -122.084

    val mockLocation = mock(Location::class.java)
    mockLocation.latitude = latitude
    mockLocation.longitude = longitude

    presenter.loadsAirpots(latitude, longitude)
    presenter.locationChanged(mockLocation)

    System.out.println(mockLocation.latitude)

Я ожидаю, что широта будет 37,422, но фактический результат равен 0,0.

Почему вы издеваетесь над этим, используя Mockito? Вы можете использовать его напрямую, как val mockLocation = Location("provider") mockLocation.latitude = latitude mockLocation.longitude = longitude

Billda 28.05.2019 16:18

@Billda Привет, я попробовал это, и я получил тот же результат, что и 0.0.

Roger Nkosi 28.05.2019 16:26
0
2
628
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы издеваетесь над объектом, реальная реализация не вызывается. Вы пытаетесь вызвать setLatitude(latitude), но это не изменит значение.

Если вы хотите издеваться над объектом, который вы должны сделать:

val mockLocation = mock(Location::class.java)
given(mockLocation.getLatitude()).willReturn(latitude)
given(mockLocation.getLongitude()).willReturn(longitude)

Или вы можете создать реальный объект:

val realLocation = Location("provider")
realLocation.latitude = latitude
realLocation.longitude = longitude

Это всегда ноль, когда я пытаюсь создать реальный объект для модульного тестирования.

Reprator 13.02.2021 07:01

Другие вопросы по теме