According to Test expected exceptions in Kotlin I can use the @Test(expected=ExceptionClass) annotation to detect an exception.
@Test(expected = Exception::class)
fun `repo fails fetching top rated movies`() = runTest {
val remoteDataSrc = mockk<MoviesRemoteDataSource>()
val dispatcher = UnconfinedTestDispatcher(testScheduler)
val repository = MoviesRepository(remoteDataSrc, dispatcher)
repository.movies = emptyList()
coEvery { remoteDataSrc.getTopRatedMovies() } throws Exception()
repository.getTopRatedMovies()
}
The above test fails with
Expected exception: java.lang.Exception java.lang.AssertionError: Expected exception: java.lang.Exception
MoviesRepository
class MoviesRepository(
private val remoteDataSource: MoviesRemoteDataSource,
private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO) {
var movies: List<Movie> = emptyList()
suspend fun getTopRatedMovies(): List<Movie> {
if (movies.isNotEmpty()) return movies
withContext(ioDispatcher) {
try {
movies = remoteDataSource.getTopRatedMovies().map { it.toDomain() }
} catch (ex: Exception) {
}
}
return movies
}
}