0

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
  }
}
HukeLau_DABA
  • 2,384
  • 6
  • 33
  • 51

0 Answers0