Допустим, у меня такая ситуация:
interface Repository {
fun getMovies(success: (List<String>) -> Unit, failure: (Int) -> Unit)
}
, и я хочу имитировать реализацию этого интерфейса. В основном в этом случае есть две лямбды в качестве входных параметров для метода getmov ie, и для тестового примера я хочу только добиться успеха (должен быть вызван success.invoke (theMoviesList)).
Ниже приведено что-то похожее на то, что я хотел бы сделать:
class MovieViewModel constructor(val repository: AppRepository) {
var movieNames = listOf<String>() // Not private, or live data, for simplicity
fun fetchMovies() {
repository.fetchMovies(
success = {
movies ->
this.movieNames = movies
}}, failure: {
statusCode ->
})
}
}
class MoviePageTests {
private var movieViewModel: MovieViewModel? = null
@Mock
lateinit var mockRepository: AppRepository
@Before
@Throws(Exception::class)
fun before() {
MockitoAnnotations.initMocks(this)
movieViewModel = MovieViewModel(repository = mockRepository)
}
@Test
fun checkFetchMoviesUpdatesMoviesData() {
var testMovies = listof("Dracula", "Superman")
//Set up mockito so that the repository generates success with testMovies above
?????
//
movieViewModel.fetchMovies()
assertEquals(movieViewModel.movies, testMovies)
}
}
Я знаю, как это сделать с помощью RepositoryImpl, но не в Mockito, несмотря на то, что просматривал множество примеров в Интернете.
Есть идеи?