2016-08-03 30 views
1

Ich versuche, einen Instrumentierungstest für meine Android-App zu schreiben. Als ich meinen Test durchgeführt, und es trifft den Abschnitt meines Code, den die com.google.android.gms.vision.face.FaceDetector Bibliothek zu verwenden versucht, wirft der Test-Framework die Folgefehler:Testfehler für Android-Instrumentierung aufgrund der Metadaten von com.google.android.gms.version

A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the <application> element:  <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 

jedoch meine AndroidManifest.xml bereits enthält, die genaue Tag-Metadaten direkt hier:

<application 
     android:allowBackup="true" 
     android:hardwareAccelerated="true" 
     android:icon="@drawable/icon" 
     android:label="NeuralEye-FaceID-2" 
     android:theme="@style/Theme.AppCompat" 
     android:largeHeap="true"> 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 
     <meta-data 
      android:name="com.google.android.gms.vision.DEPENDENCIES" 
      android:value="face" /> 

Was bin ich? Mein instrumentierten Test sieht ungefähr so ​​aus:

@RunWith(AndroidJUnit4.class) 
public class FeatureExtractionTest { 


    public FeatureExtraction mFeatureExtraction; 

    public ConcurrentSkipListSet<String> skipList = new ConcurrentSkipListSet(); 

    @Before 
    public void createFeatureExtraction() { 
     mFeatureExtraction = new FeatureExtraction(); 
    } 

    @Test 
    public void testGetFeatures() throws Exception { 
     File file = new File("new.txt"); 
     Context ctx = InstrumentationRegistry.getContext(); 
     mFeatureExtraction.getFeatures(file, skipList, ctx); 
    } 
} 

EDIT: Hinzufügen build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     applicationId "tuan.search" 
     minSdkVersion 21 
     targetSdkVersion 23 
     versionCode 1 
     versionName "0.5 " 
     multiDexEnabled true 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile files('libs/opencsv-3.7.jar') 
    compile 'com.android.support:support-v4:23.4.0' 
    compile 'com.google.android.gms:play-services:9.0.1' 
    compile 'com.android.support:design:23.4.0' 
    compile 'org.projectlombok:lombok:1.16.8' 
    compile 'com.android.support:multidex:1.0.0' 
    compile 'org.apache.directory.studio:org.apache.commons.io:2.4' 
    testCompile 'junit:junit:4.12' 
    testCompile 'org.mockito:mockito-core:1.10.19' 
    androidTestCompile 'com.android.support.test:runner:0.4' 
    androidTestCompile 'com.android.support.test:rules:0.4' 
    androidTestCompile 'com.android.support:support-annotations:23.4.0' 
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3' 
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' 
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' 
} 

Jede Hilfe sehr geschätzt wird. Ich habe bereits eine miriad von SO-Antworten gefunden, die sagen, fügen Sie das Meta-Daten-Tag zum Manifest (this one, for example), aber ich habe es bereits hinzugefügt und der Test wird immer noch nicht über die FaceDetector-Bibliothek laufen.

+0

Fügen Sie keine 'google_play_services_version' hinzu. Es wird automatisch über die Google Play Services AAR hinzugefügt. –

+0

@JaredBurrows können Sie klären? Ich habe versucht, das Tag vollständig zu entfernen und versuchte auch, gerade das "android: value" Attribut zu entfernen und in beiden Fällen empfange ich noch den gleichen Fehler, wenn der Test läuft. –

+0

Zeigen Sie den Build.gradle. –

Antwort

1

das Problem gefunden

Der Test Läufer Kontext keine Manifest-Datei. Ich musste den richtigen Kontext in die Methode einbringen, die ich getestet habe. Mein Test sieht nun wie folgt (man beachte den Swap getTargetContext):

@Test 
public void testGetFeatures() throws Exception { 
    File file = new File("new.txt"); 
    Context ctx = InstrumentationRegistry.getTargetContext(); 
    mFeatureExtraction.getFeatures(file, skipList, ctx); 
} 

FaceDetector konnte initialisiert werden. Jetzt kann ich meinen Test tatsächlich abschließen. Hoffentlich hilft das jemandem.

Requisiten zu this random answer, die Liste der Kontext ist, was mir geholfen hat.

+0

Schön, es sieht aus wie du es herausgefunden hast. –

+1

Yup, danke für die Hilfe @JaredBurrows! –