Espresso测试在试图检查是否发送了意图时未能记录意图



我正在尝试使用Espresso对我创建的AdjustableWebView类进行集成测试。

我的测试是这样的:

@Test
public void myTest() {
// intents.init() is done in the @Before setup() method

// ... some code to set up permissions correctly

// ensure that the activity doesn't actually open
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
Intent contentIntent = new Intent(Intent.ACTION_GET_CONTENT);
Instrumentation.ActivityResult contentResult = new Instrumentation.ActivityResult(Activity.RESULT_CANCELED, contentIntent);
Instrumentation.ActivityResult chooserResult = new Instrumentation.ActivityResult(Activity.RESULT_CANCELED, chooserIntent);
intending(hasAction(Intent.ACTION_GET_CONTENT)).respondWith(contentResult);
intending(hasAction(Intent.ACTION_CHOOSER)).respondWith(chooserResult);
// ... some code to load page in webview
// ... some code to click on the proper element in the webview
// verify
intended(anyOf(hasAction(Intent.ACTION_GET_CONTENT), hasAction(Intent.ACTION_CHOOSER)));
// intents.release() is done in the @After teardown() method
}

我的结果是:

IntentMatcher: (has action: is "android.intent.action.GET_CONTENT" or has action: is "android.intent.action.CHOOSER")
Matched intents:[]
Recorded intents:[]
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:1736)
at androidx.test.espresso.base.AssertionErrorHandler.handleSafely(AssertionErrorHandler.java:3)
at androidx.test.espresso.base.AssertionErrorHandler.handleSafely(AssertionErrorHandler.java:1)
at androidx.test.espresso.base.DefaultFailureHandler$TypedFailureHandler.handle(DefaultFailureHandler.java:4)
at androidx.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:5)
at androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:5)
at androidx.test.espresso.ViewInteraction.check(ViewInteraction.java:12)
at androidx.test.espresso.intent.Intents.intended(Intents.java:188)
at androidx.test.espresso.intent.Intents.intended(Intents.java:167)
at com.mypackage.myapp.webview.tests.AdjustableWebViewTests.testFileInput_intentLaunches(AdjustableWebViewTests.java:246)
... 35 trimmed
Caused by: junit.framework.AssertionFailedError: Wanted to match 1 intents. Actually matched 0 intents.
IntentMatcher: (has action: is "android.intent.action.GET_CONTENT" or has action: is "android.intent.action.CHOOSER")
Matched intents:[]
Recorded intents:[]
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:344)
at androidx.test.espresso.intent.Intents$2.check(Intents.java:192)
at androidx.test.espresso.ViewInteraction$SingleExecutionViewAssertion.check(ViewInteraction.java:2)
at androidx.test.espresso.ViewInteraction$2.call(ViewInteraction.java:10)
at androidx.test.espresso.ViewInteraction$2.call(ViewInteraction.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
FAILURES!!!
Tests run: 1,  Failures: 1

我输入了日志语句,能够验证我的代码是否使用startActivityForResult启动了一个活动,并为该活动提供了ACTION_CHOOSER意图,但由于某种原因,无论我做什么,我都无法记录意图,因此我的测试失败了。即使我删除了intending行并让活动正常打开,并且我可以验证是否创建了正确的意图(使用Log语句(,活动也会正确打开,并且传递给onActivityResult的结果代码是RESULT_CANCELLED(再次使用Log语句验证(,但我仍然无法记录意图。

有人能为我指明正确的方向吗?我不想检查打开的活动,因为我想让我的实现尽可能通用(我只想检查是否发出了一些意图,我知道会有一些活动来处理它,但我没有指定是哪个活动在做这项工作(。

我看了几个StackOverflow的帖子,但没有任何帮助:(.

我的确切情况是,我试图点击HTML输入标记,然后记录意图。我用的是浓缩咖啡。我的一位同事帮助我完成了这项工作,并通过使用UIAutomator而不是Espresso使测试工作正常。

最新更新