Я пишу тесты в Espresso для моего приложения Android, используя Kotlin.
Я хочу ожидать исключения, как в модульном тесте, и пройти тест, если такое исключение найдено.
У меня был тест, который проверял формат дополнительных функций Intent.
В реализации я выбросил исключение после получения неверного значения в намерении.
Я хочу пройти тест, это исключение. Выполнение результатов теста с «Тест не пройден» и java.lang.IllegalArgumentException
, который совпадает с тем, что я пытаюсь поймать.
Сначала я попробовал эту аннотацию:
@Test(expected = IllegalArgumentException::class)
Затем я попытался с зависимостью org.jetbrains.kotlin:kotlin-test
и следующим утверждением:
assertFailsWith<java.lang.IllegalArgumentException> {
val activityIntent = Intent()
activityIntent.putExtra("extra_connection_number", intentExtraConnectionNumber)
activityRule.launchActivity(activityIntent)
}
Что также может быть важно, это то, что исключение выдается в onCreateView
, начинающемся так:
@Throws(java.lang.IllegalArgumentException::class)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val layout = inflater.inflate(R.layout.configuration_fragment, container, false)
var connectionNumber: Int? =
activity!!.intent.getIntExtra(resources.getString(R.string.extra_connection_number), -1)
if (connectionNumber == -1) {
throw IllegalArgumentException()
}
(...)
Намерение создано с заданным дополнительным значением, и оно терпит неудачу там, где я хотел, чтобы оно провалилось. Но выброшенное исключение не попадает в эспрессо.
Зачем? Чего мне не хватает?
Я знаю, что это может быть несовместимо с Espresso, но я не могу найти нужную документацию, помогающую мне решить проблему.