Как протестировать Intent's Bundle с помощью Mockk? - PullRequest
0 голосов
/ 13 февраля 2020

Я хотел бы протестировать пользовательский класс обработчика, который запускает новый 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).

...