Robolectric 找不到 androidx/databinding/DataBinderMapperImpl

问题描述

我正在尝试使用 Robolectric 和片段场景运行片段单元测试。

当被测片段被实例化时

override fun onCreateView(
    inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {

      binding = FooFragBinding.inflate(inflater,container,false) 

通过测试

@RunWith(RobolectricTestRunner::class)
@Config(sdk = [Build.VERSION_CODES.P])
class FooFragTest {

    private var scenario: FragmentScenario<FooFragment>? = null

    @Before
    fun initFragment() {
        scenario = launchFragmentInContainer(null,R.style.Theme_AppCompat) 
    }

我明白

java.lang.NoClassDefFoundError: androidx/databinding/DataBinderMapperImpl

at com.slacorp.eptt.android.lib.databinding.FooFragBinding.inflate(FooFragBinding.java:212)
at com.slacorp.eptt.android.fragment.ActivationFragment.onCreateView(ActivationFragment.kt:103)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1818)
at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:297)
at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:317)
at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:301)
at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$ActivityScenario(ActivityScenario.java:551)
at androidx.test.core.app.ActivityScenario$$Lambda$4.run(Unknown Source)
at androidx.test.core.app.ActivityScenario.onActivity(ActivityScenario.java:561)
at androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:300)
at androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:282)
at com.slacorp.eptt.android.robolectric.ActivationScreenTest.initFragment(ActivationScreenTest.kt:83)
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.RunBefores.evaluate(RunBefores.java:24)
at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:575)
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.ClassNotFoundException: androidx.databinding.DataBinderMapperImpl
    at org.robolectric.internal.bytecode.SandboxClassLoader.getByteCode(SandboxClassLoader.java:163)
    at org.robolectric.internal.bytecode.SandboxClassLoader.maybeInstrumentClass(SandboxClassLoader.java:129)
    at org.robolectric.internal.bytecode.SandboxClassLoader.lambda$loadClass$0(SandboxClassLoader.java:115)
    at org.robolectric.util.PerfStatsCollector.measure(PerfStatsCollector.java:53)
    at org.robolectric.internal.bytecode.SandboxClassLoader.loadClass(SandboxClassLoader.java:115)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
    at com.slacorp.eptt.android.lib.databinding.FooFragBinding.inflate(FooFragBinding.java:212)
    at com.slacorp.eptt.android.fragment.ActivationFragment.onCreateView(ActivationFragment.kt:103)
    at androidx.fragment.app.Fragment.$$robo$$androidx_fragment_app_Fragment$performCreateView(Fragment.java:2698)
    at androidx.fragment.app.Fragment.performCreateView(Fragment.java)
    at androidx.fragment.app.FragmentStateManager.$$robo$$androidx_fragment_app_FragmentStateManager$createView(FragmentStateManager.java:320)
    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java)
    at androidx.fragment.app.FragmentManager.$$robo$$androidx_fragment_app_FragmentManager$moveToState(FragmentManager.java:1187)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java)
    at androidx.fragment.app.FragmentManager.$$robo$$androidx_fragment_app_FragmentManager$moveToState(FragmentManager.java:1356)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java)
    at androidx.fragment.app.FragmentManager.$$robo$$androidx_fragment_app_FragmentManager$moveFragmentToExpectedState(FragmentManager.java:1434)
    at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java)
    at androidx.fragment.app.FragmentManager.$$robo$$androidx_fragment_app_FragmentManager$moveToState(FragmentManager.java:1497)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java)
    at androidx.fragment.app.BackStackRecord.$$robo$$androidx_fragment_app_BackStackRecord$executeOps(BackStackRecord.java:447)
    at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java)
    at androidx.fragment.app.FragmentManager.$$robo$$androidx_fragment_app_FragmentManager$executeOps(FragmentManager.java:2169)
    at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java)
    at androidx.fragment.app.FragmentManager.$$robo$$androidx_fragment_app_FragmentManager$executeOpsTogether(FragmentManager.java:1992)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java)
    at androidx.fragment.app.FragmentManager.$$robo$$androidx_fragment_app_FragmentManager$removeRedundantOperationsAndExecute(FragmentManager.java:1947)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java)
    at androidx.fragment.app.FragmentManager.$$robo$$androidx_fragment_app_FragmentManager$execSingleAction(FragmentManager.java:1818)
    at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java)
    at androidx.fragment.app.BackStackRecord.$$robo$$androidx_fragment_app_BackStackRecord$commitNow(BackStackRecord.java:297)
    at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java)
    at androidx.fragment.app.testing.FragmentScenario$1.$$robo$$androidx_fragment_app_testing_FragmentScenario_1$perform(FragmentScenario.java:317)
    at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java)
    at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:301)
    at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$ActivityScenario(ActivityScenario.java:551)
    at androidx.test.core.app.ActivityScenario$$Lambda$4.run(Unknown Source)
    at androidx.test.core.app.ActivityScenario.onActivity(ActivityScenario.java:561)
    at androidx.fragment.app.testing.FragmentScenario.$$robo$$androidx_fragment_app_testing_FragmentScenario$internalLaunch(FragmentScenario.java:300)
    at androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java)
    at androidx.fragment.app.testing.FragmentScenario.$$robo$$androidx_fragment_app_testing_FragmentScenario$launchInContainer(FragmentScenario.java:282)
    at androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java)
    at com.slacorp.eptt.android.robolectric.ActivationScreenTest.initFragment(ActivationScreenTest.kt:83)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    ... 11 more

Robolectric 版本是

testImplementation 'org.robolectric:robolectric:4.4'

我已启用数据绑定

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...