我希望测试一个自定义的处理程序类,该类正在启动一个新的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的空值)。