android - 如何使用 Mockk 测试 Intent 的 Bundle?
问题描述
我想测试一个自定义处理程序类,它正在启动一个新的Activity
. 我想测试Intent
's Bundle
if 是否包含预定义的参数。
测试类:
@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)。
解决方案
推荐阅读
- c - 无法找到空 csv 值的空令牌值是什么
- model-view-controller - 当应用程序是 Razor 页面时如何在视图中使用 _Layout.cshtml
- spring-boot - 如何为特定 IP 和端口配置 Spring Boot LDAP 身份验证
- axios - 使用 axios 流式传输响应,但只需要特定的密钥
- python - 操作系统(任何或至少是 linux)会自动在内核之间分配启动的线程吗?
- kubernetes - Istio Gateway + Cert-Manager +letsencrypt 证书
- mongodb - Is it possible to (conditionally) lookup from two different collections
- django - 将位于相对路径中的文件转换为 Django File 对象
- java - 改造 Android GET 失败
- codeigniter - 如何获取使用钩子发送帖子请求的网址