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类?
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |