Я хотел бы протестировать пользовательский класс обработчика, который запускает новый Activity
. Я хотел бы проверить Intent
Bundle
, если он содержит предопределенные параметры.
Класс тестирования :
@MockK
lateinit var activity: ActivityCalendar
@Before
fun setUp() {
MockKAnnotations.init(this)
}
@Test
fun testActivityBundles() {
val book = mockk<Book>()
every { book.releaseDate } returns GregorianCalendar().apply { this.timeInMillis = 1423825586000 }
every { activity.startActivity(any()) } just Runs
val handler = ActivityHandler(activity)
handler.startRequiredActivity(book)
verify { activity.startActivity(
withArg { intent ->
val bundle = intent.extras!!
val releaseDateTimeMillis = bundle.getLong("release_date", 0L)
Assert.assertEquals(1423825586000, releaseDateTimeMillis)
}
) }
}
Код выше сбой в строке: val bundle = intent.extras!!
, но это не должно быть.
Класс, который я хочу проверить :
class ActivityHandler(val activity: Activity) {
fun startRequiredActivity(book: Book) {
val intent = buildIntent(book)
activity.startActivity(intent)
}
private fun buildIntent(book: Book): Intent {
val extras = Bundle().apply {
this.putLong("release_Date", book.releaseDate.timeInMillis)
}
return Intent(activity, ActivityBookDetails::class.java).apply {
putExtras(extras)
}
}
}
data class Book(
val releaseDate: GregorianCalendar
)
Я отладил код и обнаружил эта функция private fun buildIntent(book: Book): Intent
возвращает объект "null" (строка "null", а не Java NULL).