Код: Выделить всё
override suspend fun addCounter(counter: Counter): Long = try {
projectDao.insertCounter(CounterMapper.toEntity(counter))
} catch (e: SQLiteException) {
coroutineContext.ensureActive()
Log.e(logTag, "[SQLiteException] Database Error: ${e.message}")
throw RepositoryException(
ErrorResponse(
error = "db_error",
description = e.message ?: "No description provided"
)
)
} catch (e: IllegalStateException) {
coroutineContext.ensureActive()
Log.e(logTag, "[IllegalStateException] Database Error: ${e.message}")
throw RepositoryException(
ErrorResponse(
error = "db_error",
description = e.message ?: "No description provided"
)
)
} catch (e: Exception) {
coroutineContext.ensureActive()
Log.e(logTag, "[Unknown Exception] Database Error: ${e.message}")
throw RepositoryException(
ErrorResponse(
error = "db_error",
description = e.message ?: "No description provided"
)
)
}
< /code>
В частности, я тестирую часть SQLiteException кода. Тестовый код заключается в следующем: < /p>
@Test
fun `When database throws SQLiteException, Then addCounter throws RepositoryException`() = runTest {
val expected = RepositoryException(ErrorResponse("db_error", ""))
println(exception.message)
coEvery { projectDao.insertCounter(any()) } throws SQLiteException("Test exception thrown.")
try {
underTest.addCounter(validCounter.copy())
fail("Expected RepositoryException to be thrown")
} catch (e: RepositoryException) {
assertEquals(expected.errorResponse.error, e.errorResponse.error)
assertEquals(expected.errorResponse.description, e.errorResponse.description)
}
}
Однако , когда создается исключение, сообщение в конечном итоге становится нулевым (при условии, что сообщение «Выброшено тестовое исключение»), а код заменяет его на «Описание не предоставлено».
Теперь, насколько я понимаю, заключается в том, что SQLiteException должно предоставлять сообщение, которое я ему дал, но это не происходит.
Есть идеи, почему это может происходить?
Спасибо,
Подробнее здесь: https://stackoverflow.com/questions/793 ... ll-message
Мобильная версия