Я пытаюсь запустить модульный тест с Mockito, но у меня есть вспомогательный метод, в котором я хочу использовать реальный класс:
public static Location fromCoordinates(float latitude, float longitude){
Location result = new Location("");
result.setLatitude(latitude);
result.setLongitude(longitude);
return result;
}
Приведенный выше метод в настоящее время вызывает «Метод ... не издевались «. ошибка, как описано здесь , она дает подсказку о том, как использовать значения по умолчанию, но это не будет работать для меня, так как это приводит к тому, что широта и долгота возвращают 0 впоследствии.
Я также попытался добавить Mockito.mock(Location.class, CALLS_REAL_METHODS);
в начале моего теста, который, кажется, не имеет никакого эффекта.
Как я могу настроить свой тест, чтобы использовать реальный класс Location, все еще используя mockito для макета остальные?
[ Редактировать ] Для контекста, это рассматриваемый модульный тест
@Test
public void OpensCenteredInLocation() {
Location l = Mockito.mock(Location.class, CALLS_REAL_METHODS);
//When the user starts the app
LocationManager m = Mockito.mock(LocationManager.class);
Location initial = LocationHelper.fromCoordinates(10, 15); //<--it fails here
doReturn(initial).when(m).getLastKnownLocation(any(String.class));
MyApp main = new MyApp(m);
//Then it should open with the map centered in the user's location
Assert.assertEquals(10, main.CameraPosition.longitude, 0);
Assert.assertEquals(15, main.CameraPosition.longitude, 0);
}
Когда он терпит неудачу, он выдает java.lang.RuntimeException: Method setLatitude in android.location.Location not mocked. See http://g.co/androidstudio/not-mocked for details.