有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 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) 个答案

  1. # 1 楼答案

    你是在用gradle设置吗

    testImplementation "androidx.core:core-ktx:+"  ?
    

    如果是这样,请尝试使用固定版本,如1.3.2。 我可以解决同样的问题。 看来ViewCompat的实现已经改变了