安卓 java中的机器人选择测试。lang.NoSuchFieldError:在应用窗口侦听器上标记
我正在尝试使用Roboelectric运行一个简单的单元测试,但是在尝试构建活动时,我遇到以下错误:
java.lang.Exception: Main looper has queued unexecuted runnables. This might be the cause of the test failure. You might need a shadowOf(getMainLooper()).idle() call.
at org.robolectric.安卓.internal.AndroidTestEnvironment.checkStateAfterTestFailure(AndroidTestEnvironment.java:502)
at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:581)
at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:263)
at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:89)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoSuchFieldError: tag_on_apply_window_listener
at 安卓x.core.view.ViewCompat$Api21Impl.setOnApplyWindowInsetsListener(ViewCompat.java:4733)
at 安卓x.core.view.ViewCompat.setOnApplyWindowInsetsListener(ViewCompat.java:2510)
at 安卓x.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:938)
at 安卓x.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
at 安卓x.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:693)
at 安卓x.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
at 安卓x.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:303)
at 安卓x.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)
at com.vedantu.app.nativemodules.vQuiz.view.ui.MainQuizActivity.onCreate(MainQuizActivity.kt:31)
at 安卓.app.Activity.performCreate(Activity.java:6251)
at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at 安卓x.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:711)
at org.robolectric.安卓.controller.ActivityController.lambda$create$0(ActivityController.java:106)
at org.robolectric.shadows.ShadowPausedLooper.runPaused(ShadowPausedLooper.java:195)
at org.robolectric.安卓.controller.ActivityController.create(ActivityController.java:106)
at org.robolectric.安卓.controller.ActivityController.create(ActivityController.java:111)
at org.robolectric.安卓.fakes.RoboMonitoringInstrumentation.startActivitySyncInternal(RoboMonitoringInstrumentation.java:66)
at org.robolectric.安卓.internal.LocalActivityInvoker.startActivity(LocalActivityInvoker.java:40)
at 安卓x.test.core.app.ActivityScenario.launchInternal(ActivityScenario.java:265)
at 安卓x.test.core.app.ActivityScenario.launch(ActivityScenario.java:195)
at com.vedantu.app.nativemmodules.vQuiz.utils.ReferralUtilTest.testQuizHomeActivity(ReferralUtilTest.kt:109)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:575)
... 6 more
罪魁祸首似乎是这一行:java.lang.NoSuchFieldError: tag_on_apply_window_listener
我的测试文件非常严格:
@Test
fun testQuizHomeActivity(){
val context: Context = RuntimeEnvironment.application.getApplicationContext()
FirebaseApp.initializeApp(context)
val intent: Intent = Intent()
intent.putExtra("userId", "")
intent.putExtra("userName", "userName")
intent.putExtra("upcomingVQuiz", "upcomingVQuiz")
intent.putExtra("source", "source")
shadowOf(getMainLooper()).idle();
val quizHomeActivity = Robolectric.buildActivity(MainQuizActivity::class.java, intent).create().get()
Assert.assertNotNull(activity)
}
其他测试正在顺利进行
# 1 楼答案
你是在用gradle设置吗
如果是这样,请尝试使用固定版本,如1.3.2。 我可以解决同样的问题。 看来ViewCompat的实现已经改变了