我已经在我的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");
}
}