Espresso测试类中的接口侦听器片段中的问题

我已经在我的Android代码库中集成了espresso。对于静态活动,它工作正常。我可以检查视图并为其声明值。我在代码库中有一个包含片段的详细屏幕,这些片段具有接口回调。那么我们如何将其与espresso集成在一起?

我在其中添加了片段测试依赖项

androidTestImplementation 'androidx.fragment:fragment-testing:'+1.1.0

下面是我的意式浓缩咖啡测试代码

 @Before
    fun load() {
        launchFragmentInContainer<FragmentMyProfileEdit>()
    }

    @Test
    fun testProfileFields() {
        Espresso.onView(ViewMatchers.withId(R.id.edit_profile_user_name)).check(ViewAssertions.matches(ViewMatchers.withText(R.string.name_form_field_hint)))
    }

但是我遇到这样的错误

java.lang.RuntimeException: androidx.fragment.app.testing.FragmentScenario$EmptyFragmentactivity@6b5aeec must implement IFragmentMyProfileEdit
at xx.xx.my_profile.FragmentMyProfileEdit.onAttach(FragmentMyProfileEdit.java:101)
at androidx.fragment.app.Fragment.performAttach(Fragment.java:2574)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:828)
at androidx.fragment.app.FragmentTransition.addToFirstinlastOut(FragmentTransition.java:1197)
at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1080)
at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:119)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1866)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
at androidx.fragment.app.FragmentManagerImpl.execSingleaction(FragmentManagerImpl.java:1696)
at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:293)
at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:312)
at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:291)
at androidx.test.core.app.activityScenario.lambda$onactivity$1$activityScenario(activityScenario.java:534)
at androidx.test.core.app.activityScenario$$Lambda$0.run(Unknown Source:4)
at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2093)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.activityThread.main(activityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

    running callback: androidx.test.rule.activityTestRule$LifecycleCallback@5735289
    callback completes: androidx.test.rule.activityTestRule$LifecycleCallback@5735289
    running callback: androidx.test.core.app.activityScenario$1@436128e
    callback completes: androidx.test.core.app.activityScenario$1@436128e
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: xx.xx,PID: 14522
    java.lang.RuntimeException: androidx.fragment.app.testing.FragmentScenario$EmptyFragmentactivity@6b5aeec must implement IFragmentMyProfileEdit
        at xx.xx.my_profile.FragmentMyProfileEdit.onAttach(FragmentMyProfileEdit.java:101)
        at androidx.fragment.app.Fragment.performAttach(Fragment.java:2574)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:828)
        at androidx.fragment.app.FragmentTransition.addToFirstinlastOut(FragmentTransition.java:1197)
        at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1080)
        at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:119)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1866)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
        at androidx.fragment.app.FragmentManagerImpl.execSingleaction(FragmentManagerImpl.java:1696)
        at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:293)
        at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:312)
        at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:291)
        at androidx.test.core.app.activityScenario.lambda$onactivity$1$activityScenario(activityScenario.java:534)
        at androidx.test.core.app.activityScenario$$Lambda$0.run(Unknown Source:4)
        at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2093)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.activityThread.main(activityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
E/MonitoringInstr: Exception encountered by: Thread[main,5,main]. Dumping thread state to outputs and pining for the fjords.
    java.lang.RuntimeException: androidx.fragment.app.testing.FragmentScenario$EmptyFragmentactivity@6b5aeec must implement IFragmentMyProfileEdit
        at xx.xx.my_profile.FragmentMyProfileEdit.onAttach(FragmentMyProfileEdit.java:101)
        at androidx.fragment.app.Fragment.performAttach(Fragment.java:2574)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:828)
        at androidx.fragment.app.FragmentTransition.addToFirstinlastOut(FragmentTransition.java:1197)
        at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1080)
        at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:119)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1866)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
        at androidx.fragment.app.FragmentManagerImpl.execSingleaction(FragmentManagerImpl.java:1696)
        at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:293)
        at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:312)
        at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:291)
        at androidx.test.core.app.activityScenario.lambda$onactivity$1$activityScenario(activityScenario.java:534)
        at androidx.test.core.app.activityScenario$$Lambda$0.run(Unknown Source:4)
        at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2093)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.activityThread.main(activityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
E/THREAD_STATE:   Thread[glide-active-resources,main]
        java.lang.Object.wait(Native Method)
        java.lang.Object.wait(Object.java:422)
        java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:188)
        java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:209)
        com.bumptech.glide.load.engine.activeresources.cleanReferenceQueue(activeresources.java:132)
        com.bumptech.glide.load.engine.activeresources$2.run(activeresources.java:63)
        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        com.bumptech.glide.load.engine.activeresources$1$1.run(activeresources.java:45)
        java.lang.Thread.run(Thread.java:764)

      Thread[OkHttp ConnectionPool,main]
        java.lang.Object.wait(Native Method)
        com.android.okhttp.ConnectionPool$1.run(ConnectionPool.java:101)
        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        java.lang.Thread.run(Thread.java:764)

      Thread[Instr: androidx.test.runner.AndroidJUnitRunner,main]
        java.lang.Object.wait(Native Method)
        android.app.Instrumentation$SyncRunnable.waitForComplete(Instrumentation.java:2104)
        android.app.Instrumentation.runOnmainSync(Instrumentation.java:408)
        androidx.test.core.app.activityScenario.onactivity(activityScenario.java:527)
        androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:290)
        androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:272)
        xx.xx.MyProfilePageTest.load(MyProfilePageTest.kt:45)
        java.lang.reflect.Method.invoke(Native Method)
        org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:76)
        androidx.test.rule.activityTestRule$activityStatement.evaluate(activityTestRule.java:527)
        org.junit.rules.RunRules.evaluate(RunRules.java:20)
        org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:104)
        org.junit.runners.Suite.runChild(Suite.java:128)
        org.junit.runners.Suite.runChild(Suite.java:27)
        org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        org.junit.runner.JUnitCore.run(JUnitCore.java:137)
        org.junit.runner.JUnitCore.run(JUnitCore.java:115)
        androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
        androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:388)
        android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2075)

      Thread[pool-2-thread-1,main]
        java.lang.Object.wait(Native Method)
        java.lang.Thread.parkFor$(Thread.java:2137)
        sun.misc.Unsafe.park(Unsafe.java:358)
        java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
        java.ut

我的片段onAttach()方法包含侦听器接口

@Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof IFragmentMyProfileEdit) {
            mListener = (IFragmentMyProfileEdit) context;
            textStylesFactory = getMyApplication().getTextStylesHolder().getTextStylesFactory();
        } else {
            throw new RuntimeException(context.toString() + " must implement IFragmentMyProfileEdit");
        }
    }
lanshushumanyouji 回答:Espresso测试类中的接口侦听器片段中的问题

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3058539.html

大家都在问