Аргумент, переданный для verify (), не является насмешкой для ArrayList Observer - PullRequest
0 голосов
/ 28 октября 2019

Я создал юнит-тест асинхронной задачи. Он получает JSON от API, и я хочу просмотреть ArrayList, который я получил.

Вот мой код:

public class MovieViewModelTest {
@Rule
public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();

private MovieViewModel viewModel;
private MovieRepository movieRepository = mock(MovieRepository.class);
private Observer<ArrayList<Movie>> observer;

@Before
public void setUp(){
    viewModel = new MovieViewModel(movieRepository);
    observer = mock(Observer.class);
}

@Test
public void getMovie() {
    ArrayList<Movie> dummyMovie = viewModel.getArrayMovie();
    MutableLiveData<ArrayList<Movie>> movies = new MutableLiveData<>();
    movies.setValue(dummyMovie);
    when(movieRepository.getListMovie()).thenReturn(dummyMovie);
    observer = movies1 -> assertNotNull(movies1);
    viewModel.getMovie().observeForever(observer);
    verify(observer).onChanged(dummyMovie);
}

Но когда я пытаюсь запустить его, он показывает ошибку:

org.mockito.exceptions.misusing.NotAMockException: 
Argument passed to verify() is of type MovieViewModelTest$$Lambda$1/1976870338 and is not a mock!

Что не так с моим кодом?

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Несмотря на то, что вы определяете глобальную переменную observer и инициализируете ее как макет в функции setUp(), вы перезаписываете ее на getMovie() с помощью movies1 -> assertNotNull(movies1);, который больше не является макетом.

0 голосов
/ 28 октября 2019

Исключение говорит само за себя: объект, на который вы звоните verify (ваш observer), не является ложным. Проверка может быть вызвана только на тех. Вы должны изменить свою реализацию наблюдателя, чтобы быть ложным.

...