Robolectric和AndroidX ClassNotFoundException android.support.v4.app.NotificationCompat $ Style

rol*_*ndl 5 junit android classnotfoundexception robolectric

我正在尝试使用Robolectric,以便在不使用模拟器或设备的情况下对Android应用程序中的某些类进行单元测试。例如,我想对Dao类进行单元测试,但是我总是有以下异常:

造成原因:java.lang.ClassNotFoundException:android.support.v4.app.NotificationCompat $ Style

这是fullstackstrace:

java.lang.NoClassDefFoundError:com / pcg.ape.AudiencePlus.a(android.support/v4/app/NotificationCompat$Style)com.hager处com.pcg.ape.AudiencePlus.initialize(Unknown Source) org.robolectric.android.internal.AndroidEnvironment.lambda $ installAndCreateApplication $ 0(AndroidEnvironment.java:253)处的app.AppApplication.onCreate(AppApplication.kt:360)在org.robolectric.util.PerfStatsCollector.measure(PerfStatsCollector.java:75) )位于org.robolectric.android.internal.AndroidEnvironment.installAndCreateApplication(AndroidEnvironment.java:253)位于org.robolectric.android.internal.AndroidEnvironment.setUpApplicationState(AndroidEnvironment.java:149)位于org.robolectric.RobolectricTestRunner.beforeTest(Robolectric。 java:298),网址为org.robolectric.internal.SandboxTestRunner $ 2。在org.robolectric.internal.bytecode.Sandbox.lambda $ runOnMainThread $ 0(Sandbox.java:89)处的lambda $ evaluate $ 0(SandboxTestRunner.java:247)在java.util.concurrent.FutureTask.run(FutureTask.java:266)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)在java.lang.Thread.run(Thread.java:745) )由以下原因导致:java.lang.ClassNotFoundException:android.support.v4.app.NotificationCompat $ Style在org.robolectric.internal.bytecode.SandboxClassLoader.getByteCode(SandboxClassLoader.java:164)在org.robolectric.internal.bytecode.SandboxClassLoader org.org.robolectric.internal.bytecode.SandboxClassLoader.lambda $ findClass $ 0(SandboxClassLoader.java:112)处的.maybeInstrumentClass(SandboxClassLoader.java:119)在组织处。java.lang.ClassLoader.loadClass(ClassLoader.java:424)上的org.robolectric.internal.bytecode.SandboxClassLoader.findClass(SandboxClassLoader.java:111)上的robolectric.util.PerfStatsCollector.measure(PerfStatsCollector.java:53) .lang.ClassLoader.loadClass(ClassLoader.java:357)...还有16个

请注意,AudiencePlus库是一个用于接收推送通知的库(例如OneSignal)。

该项目使用androidX。这里有一些配置元素:

gradle.properties文件包含以下几行:

android.enableJetifier=true
android.useAndroidX=true

android.enableUnitTestBinaryResources=true
Run Code Online (Sandbox Code Playgroud)

build.gradleapp模块的文件包含以下几行:

android
{
  defaultConfig
  {
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    testOptions
    {
      unitTests
      {
        includeAndroidResources = true
      }
    }
  }
}

dependencies
{
  testImplementation "junit:junit:4.12"
  testImplementation "androidx.test:runner:1.1.1"
  testImplementation "androidx.test.ext:junit-ktx:1.1.0"
  testImplementation "org.robolectric:robolectric:4.2"
}
Run Code Online (Sandbox Code Playgroud)

这是我要测试的课程:

package com.hager.ecat.room.ecat.dao

import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class MyDaoTest
{

  @Test
  fun myMethodTest()
  {

  }

}
Run Code Online (Sandbox Code Playgroud)

请注意,我尝试将所有“ Shorten命令行”选项插入“运行/调试配置”菜单。

“ none”不会编译(参数太长),而其他所有东西都将与一起使用ClassNotFoundException

有人可以帮助我吗?为什么它会尝试加载非androidx类?