Espresso单元测试NullPointerException



我在单元测试中遇到了问题。当从单元测试中设置最喜欢的值时,但总是返回NullPointerException。

这是我的仓库:

class FakeFilmRepository(
private val remoteDataSource: RemoteDataSource,
private val localDataSource: LocalDataSource,
private val appExecutors: AppExecutors) : FilmDataSource {
override fun setFilmFavorite(film: FilmEntity, state: Boolean) =
appExecutors.diskIO().execute { localDataSource.setFilmFavorite(film, state) }}

这是我的单元测试:

class FilmRepositoryTest {
@get:Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()
private val remote = mock(RemoteDataSource::class.java)
private val local = mock(LocalDataSource::class.java)
private val appExecutors = mock(AppExecutors::class.java)
private val filmRepository = FakeFilmRepository(remote, local, appExecutors)
private val movieResponses = DataDummy.generateRemoteDummyMovies()
private val movieId = movieResponses[0].id
private val movieCastResponses = DataDummy.generateRemoteDummyCasts(movieId)
@Mock
private lateinit var observer: Observer<FilmWithCast>
@Test
fun setFavoriteFilm() {
val dummyFilmWithCast = Resource.success(DataDummy.generateDummyFilmWithCasts(DataDummy.generateDummyMovies()[0], false))
val film = MutableLiveData<Resource<FilmWithCast>>()
film.value = dummyFilmWithCast
`when`(filmRepository.getFilmWithCasts(movieId)).thenReturn(film)
val castResource = film.value
if (castResource != null) {
val filmWithCast = castResource.data

if (filmWithCast != null) {
val filmEntity = filmWithCast.mFilm
val newState = !filmEntity.favorite
filmRepository.setFilmFavorite(DataDummy.generateDummyMovies()[0], newState) //ERROR NULL
}
}
verify(observer).onChanged(dummyFilmWithCast.data)
} }

Result ERROR NULL:

java.lang.NullPointerException
at com.pamungkasrizall.films.data.FakeFilmRepository.setFilmFavorite(FakeFilmRepository.kt:188)
at com.pamungkasrizall.films.data.FilmRepositoryTest.setFavoriteFilm(FilmRepositoryTest.kt:115)

如何修复?

您应该设置diskIO()返回一个实际值,如:

when(appExecutors.diskIO()).thenReturn(someActualValue)

如果没有设置,diskIO()返回默认值null,并且在null上调用函数(execute)会产生一个异常。

相关内容

最新更新