我已经获得了一套仪器测试,这些测试旨在使用Firebase测试实验室在Android 4.4到8的各种物理设备上运行。
我可以在任何操作系统版本以及Firebase测试实验室中的新设备上本地运行这些测试,但是当我在运行4.4的设备上运行Firebase测试实验室中的这些测试时(当前在Moto X和Galaxy S4 Mini)是一个例外,尽管个别测试案例都报告成功。这是我见过的例外情况:
java.lang.NoClassDefFoundError: org.junit.internal.TextListener FATAL EXCEPTION: Instr: android.support.test.runner.AndroidJUnitRunner Process: today.onedrop.android.debug, PID: 5579 java.lang.NoClassDefFoundError: org.junit.internal.TextListener
at android.support.test.internal.runner.listener.InstrumentationResultPrinter.instrumentationRunFinished(InstrumentationResultPrinter.java:221)
at android.support.test.internal.runner.TestExecutor.reportRunEnded(TestExecutor.java:92)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:67)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:375)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1792)
我怀疑Firebase实际上不是一个因素,如果我有一台Moto X或Galaxy S4 Mini在本地进行测试,这些测试会以同样的方式失败。不幸的是,我无法测试这个理论。
更新我的Espresso测试以使用TestOrchestrator
后,我开始在Android 4.4本地AVD上获得NoClassDefFoundError
。它与上述不同:
FATAL EXCEPTION: Instr: android.support.test.runner.AndroidJUnitRunner
Process: today.onedrop.android.debug, PID: 15683
java.lang.NoClassDefFoundError: org.junit.runner.Request
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:353)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
在Firebase上使用TestOrchestrator
会产生新错误,而不是旧错误。任何人都猜测他们是否有相同的根本原因,但他们的相似之处显然是可疑的。
更新#2
@ MartinZeitler关于MultiDex的直觉似乎是正确的。我已经通过在我的gradle配置中将缺少的类添加到multidex keep file来解决NoClassDefFoundError
multiDexKeepFile file('multidex-config.txt')
multidex-config.txt的:
org/junit/runner/Request.class
org/junit/internal/TextListener.class
似乎4.4上的multidex需要一些帮助。或许这只是一个黑客,只会导致与其他缺少类的随机崩溃。 无论如何一切都在恢复!
答案 0 :(得分:2)
你是否为jUnit添加了一个依赖项?即使在较旧版本的Android上,也应该知道该库类...导致假设您在构建Android<时可能还需要在multiDexEnabled true
中设置build.gradle
。 API 22(默认情况下在所有后续API上启用)。
dependencies {
testImplementation 'junit:junit:4.12'
}
gcloud firebase test android models list
列出设备......
┌───────────────────┬──────────┬─────────────────────────────────────┬──────────┬─────────────┬────────────────┬────────────┐
│ MODEL_ID │ MAKE │ MODEL_NAME │ FORM │ RESOLUTION │ OS_VERSION_IDS │ TAGS │
├───────────────────┼──────────┼─────────────────────────────────────┼──────────┼─────────────┼────────────────┼────────────┤
│ serranolte │ Samsung │ Galaxy S4 mini │ PHYSICAL │ 960 x 540 │ 19 │ │
│ victara │ Motorola │ Moto X │ PHYSICAL │ 1920 x 1080 │ 19 │ │
└───────────────────┴──────────┴─────────────────────────────────────┴──────────┴─────────────┴────────────────┴────────────┘
gcloud firebase test android models describe serranolte
brand: Samsung
codename: serranolte
form: PHYSICAL
supportedVersionIds:
- '19'
gcloud firebase test android models describe victara
brand: Motorola
codename: victara
form: PHYSICAL
supportedVersionIds:
- '19'
它是两个硬件设备。