我编写了以下代码,通过单击按钮在手机的浏览器中打开一个URL
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(uriString))
startActivity(intent)
我正在尝试编写Robolectric测试,该测试仅在所需的网页打开时才能通过,但不确定如何执行。这可能吗?
我正在尝试编写Robolectric测试,只有在所需的网页已打开
这是不可能的,但是(这实际上是您应该测试的内容),您可以使用startActivity
在Context
上检查是否Intent
被调用 符合特定条件。
[假设您已将代码设计为可测试的,则应具有采用Context
和Uri
或String
的方法(或类)。我们将假设以下内容:
fun openLink(context: Context, link: Uri){
val intent = Intent(Intent.ACTION_VIEW, link)
context.startActivity(intent)
}
然后我们可以编写以下测试(注意:此示例使用mockito-kotlin):
@Test
fun `verify intent was broadcast`(){
val context: Context = mock()
val expectedLink = "https://google.com"
val uri: Uri = mock()
whenever(uri.toString()).thenReturn(expectedLink)
tested.openLink(context, uri) // "tested" is the instance of your class under test
verify(context).startActivity(
argThat {
this.action == Intent.ACTION_VIEW &&
this.dataString!! == expectedLink
}
)
}