如何解决android 中的 Robolectic 测试抛出 java.lang.NoSuchFieldError: tag_on_apply_window_listener
我正在尝试使用 Roboelectric 运行一个简单的单元测试,但是在尝试构建 Activity 时,我收到以下错误:
new Blob([response.data])
罪魁祸首似乎是这一行: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.android.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 androidx.core.view.ViewCompat$Api21Impl.setonApplyWindowInsetsListener(ViewCompat.java:4733)
at androidx.core.view.ViewCompat.setonApplyWindowInsetsListener(ViewCompat.java:2510)
at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:938)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:693)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:303)
at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)
at com.vedantu.app.nativemodules.vQuiz.view.ui.MainQuizActivity.onCreate(MainQuizActivity.kt:31)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:711)
at org.robolectric.android.controller.ActivityController.lambda$create$0(ActivityController.java:106)
at org.robolectric.shadows.ShadowPausedLooper.runPaused(ShadowPausedLooper.java:195)
at org.robolectric.android.controller.ActivityController.create(ActivityController.java:106)
at org.robolectric.android.controller.ActivityController.create(ActivityController.java:111)
at org.robolectric.android.fakes.RoboMonitoringInstrumentation.startActivitySyncInternal(RoboMonitoringInstrumentation.java:66)
at org.robolectric.android.internal.LocalActivityInvoker.startActivity(LocalActivityInvoker.java:40)
at androidx.test.core.app.ActivityScenario.launchInternal(ActivityScenario.java:265)
at androidx.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
其他测试都没有问题。
解决方法
你在使用 gradle 设置吗
testImplementation "androidx.core:core-ktx:+" ?
如果是这样,请尝试使用固定版本,例如 1.3.2。 我可以通过那个解决同样的问题。 看来 ViewCompat 的实现已更改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。