传递给verify()的参数不是ArrayList Observer上的mock



我创建了一个异步任务的单元测试。它从API获得JSON,我想观察我得到的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!

我的代码出了什么问题?

异常说明了一切:在其上调用verify(您的observer(的对象不是mock。只能对这些调用Verify。您应该将observer实现更改为mock。

尽管您定义了一个全局observer变量,并在setUp()函数中将其初始化为mock,但您在getMovie()上用不再是mock的movies1 -> assertNotNull(movies1);覆盖它。

最新更新