浓缩咖啡意向验证:“匹配0个意图”,但“已记录意图”

问题描述 投票:0回答:2

我想简单地存根一个意图,该意图要求系统在用户单击按钮后以指定的URL打开网络浏览器

Intents.init()
val expectedIntent = allOf(hasAction(Intent.ACTION_VIEW), hasData(url))
intending(expectedIntent).respondWith(ActivityResult(0, null))

// here text view with link is clicked which will 
// launch browser to show web site
onView(withId(id)).perform(click())

intended(expectedIntent)
Intents.release()

运行测试时,我得到

junit.framework.AssertionFailedError: Wanted to match 1 intents. Actually matched 0 intents.

IntentMatcher: (has action: is "android.intent.action.VIEW" and has data: is <false>)

Matched intents:[]

Recorded intents:
-Intent { act=android.intent.action.VIEW dat=http://www.mysite.or/... } handling packages:[[com.android.chrome]])
at junit.framework.Assert.fail(Assert.java:50)
at androidx.test.espresso.intent.VerificationModes$Times.verify(VerificationModes.java:80)
at androidx.test.espresso.intent.Intents.internalIntended(Intents.java:346)
at androidx.test.espresso.intent.Intents$3.run(Intents.java:204)
at androidx.test.espresso.intent.Intents$PropogatingRunnable.run(Intents.java:224)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2163)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

很明显,该意图已启动但没有被打断,但是为什么?

也许我需要使用测试规则?但是,我正在隔离启动片段

@Before
fun init() {
    scenario = launchFragmentInContainer(null, R.style.Theme_AppCompat) {}
}

edit

测试规则是required

edit

也许我需要片段测试rule

android android-intent android-espresso
2个回答
0
投票

意图类型Intent.ACTION_VIEW的意图验证正在工作,这是导致故障的hasData方法。

我显然不需要任何测试规则。


0
投票

由于您未指定url是什么,所以我只能猜测此参数与期望值不匹配。

如果您通过类似方式启动浏览器:

val url = "https://stackoverflow.com"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent)

然后这在测试中可以很好地工作:

val url = "https://stackoverflow.com"
val expectedIntent = allOf(hasAction(Intent.ACTION_VIEW), hasData(url))
intending(expectedIntent).respondWith(Instrumentation.ActivityResult(0, null))

// perform click...

intended(expectedIntent)
© www.soinside.com 2019 - 2024. All rights reserved.