Nella mia app Android ho attivato il multidexing. L'app funziona perfettamente con gli emulatori. Sto usando robotium per testare l'app. Ma quando eseguo test cases di strumentazione, a volte il test passa, ma soprattutto falliscono anche dopo il riavvio del sistema. Non c'è alcun cambiamento di codice tra il tempo che passa e fallisce.Test di strumentazione fallito in modo casuale con multidexing abilitato
predefinito di configurazione Gradle:
android {
defaultConfig {
applicationId "com.example.androidapp"
minSdkVersion 16
targetSdkVersion 23
multiDexEnabled true
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
testProguardFile "proguard-test.txt"
}
}
anche l'aggiunta di dipendenze per il test:
androidTestCompile fileTree(dir: 'libs', include:'robotium-solo-5.3.0.jar')
androidTestCompile ('com.android.support:multidex-instrumentation:1.0.1') {
exclude group: 'com.android.support', module: 'multidex' }
In AndroidManifest.xml ho menzionato il tag applicazione come:
<application
android:name="StartupActivity"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" ...../>
Ho esteso "android.support.multidex.MultiDexApplication" in StartupActivity. I tempi in cui i casi di test strumentazione cadono ottengo il seguente errore:
INSTRUMENTATION_RESULT: shortMsg=java.lang.IllegalAccessError
INSTRUMENTATION_RESULT: longMsg=java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
INSTRUMENTATION_CODE: 0
Il messaggio di errore nel logcat è:
W/dalvikvm﹕ Class resolved by unexpected DEX: Lcom/example/androidapp/StartupActivity;(0xa695df08):0x9910e000 ref [Landroid/support/multidex/MultiDexApplication;] Landroid/support/multidex/MultiDexApplication;(0xa695df08):0x99a2c000
W/dalvikvm﹕ (Lcom/example/androidapp/StartupActivity; had used a different Landroid/support/multidex/MultiDexApplication; during pre-verification)
W/dalvikvm﹕ Unable to resolve superclass of Lcom/example/androidapp/StartupActivity; (540)
W/dalvikvm﹕ Link of class 'Lcom/example/androidapp/StartupActivity;' failed
D/AndroidRuntime﹕ Shutting down VM
W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa628c288)
La classe di test si presenta un po 'come:
public class HelloActivityTest extends ActivityInstrumentationTestCase2<HelloActivity> {
private Solo solo;
public HelloActivityTest() {
super(HelloActivityTest.class);
}
@Override
public void setUp() throws Exception {
setActivityInitialTouchMode(false);
solo = new Solo(getInstrumentation(), getActivity());
}
public void test1() {}
public void test2() {}
}
I sto eseguendo il test case come un test di Android. Non riesco a capire quale dipendenza sta incasinando il codice. Oltre a questo, i guasti casuali del codice sono scettici. Per favore aiuto.
I membri del mio team hanno osservato cose simili riguardo ai test dell'espresso e al multidex. Più che non riesce a identificare che ci sono test da eseguire con multidex abilitato ... – OceanLife
@OceanLife Hai trovato qualche soluzione? – whitepearl
No, non ancora. È affidabile senza multidex, quindi ho suggerito di compilare alcune delle librerie di analisi che stanno trasformando le cose in una soluzione provvisoria ... solo per tornare a non richiedere il multidex. Il tuo messaggio di errore (impl inaspettato) mi ricorda gli errori di incompatibilità dell'SDK di Java, i cosiddetti "VerifyError" ... Prendi un po 'di proguarding in movimento per rimuovere i bit ingombranti ... – OceanLife