W mojej aplikacji na Androida włączono funkcję wielościeżkową. Aplikacja działa dobrze na emulatorach. Używam robotów do testowania aplikacji. Ale kiedy wykonuję testy testowe oprzyrządowania, czasami test przechodzi, ale przeważnie również zawodzą po ponownym uruchomieniu systemu. Nie ma żadnej zmiany kodu między czasem, który upłynął a porażką.Test oprzyrządowania kończy się losowo z włączoną obsługą wielościeżkową
domyślna konfiguracja Gradle:
android {
defaultConfig {
applicationId "com.example.androidapp"
minSdkVersion 16
targetSdkVersion 23
multiDexEnabled true
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
testProguardFile "proguard-test.txt"
}
}
także dodawać zależności do badań:
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' }
AndroidManifest.xml już wspomniano znacznik stosowana jest jako:
<application
android:name="StartupActivity"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" ...../>
I przedłużony "android.support.multidex.MultiDexApplication" w StartupActivity. Czasy, gdy przypadki testowe oprzyrządowanie spadnie pojawia się następujący błąd:
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
Komunikat o błędzie w LogCat jest:
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)
Klasa test wygląda nieco jak:
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 prowadzę test jako test Androida. Nie jestem w stanie zrozumieć, która zależność psuje kod. Poza tym losowe niepowodzenia kodu są sceptyczne. Proszę pomóż.
Członkowie mojego zespołu zauważyli podobne rzeczy dotyczące testów espresso i wielowątkowych. Więcej, że nie jest w stanie stwierdzić, że istnieją testy, które można uruchomić z włączoną obsługą wielu ... – OceanLife
@OceanLife Czy znalazłeś jakieś rozwiązanie? – whitepearl
Nie, jeszcze nie mamy. Jest niezawodny bez multidex, dlatego zasugerowałem, abyśmy skompilowali niektóre z bibliotek analitycznych, które zwiększają popularność jako rozwiązanie tymczasowe ... aby powrócić do niewymagającego wielostrumieniowego. Twój komunikat o błędzie (nieoczekiwany implik) przypomina mi błędy niezgodności SDK Java, tak zwane "VerifyError" (s) ... Uzyskaj pewne postępy w ruchu, aby usunąć nieporęczne bity ... – OceanLife