1

Androidアプリの計測テストを作成しようとしています。com.google.android.gms.versionメタデータによるAndroid計測テストのエラー

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" /> 
:私は私のテストを実行し、それが com.google.android.gms.vision.face.FaceDetectorライブラリを使用しようとする私のコードのセクションをヒットすると、テストフレームワークは、次のエラーがスローされます

しかし、私のAndroidManifest.xmlにはすでに、右ここで、その正確なメタデータタグが含まれていない:

<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" /> 

私は何をしないのですか?

@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:すべてのヘルプは高く評価され

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' 
} 

build.gradle追加マイインストルメントテストは次のようになります。私はすでにマニフェスト(this one, for example)にメタデータタグを追加すると言っているので、既に追加されていますが、テストはまだFaceDetectorライブラリを通過しません。

+0

「google_play_services_version」を追加しないでください。 Google PlayのサービスAARを使用して自動的に追加されます。 –

+0

@ JaredBurrowsあなたは明確にすることができますか?私はタグを完全に削除しようとしただけで、 "android:value"属性を削除しようとしましたが、両方のインスタンスでテストが実行されたときに同じエラーが表示されます。 –

+0

build.gradleを表示します。 –

答えて

1

は問題

は、テストランナーコンテキストがマニフェストファイルを持っていませんが見つかりました。私はテストしていたメソッドに正しいコンテキストを渡す必要がありました。

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

FaceDetectorを初期化することができた:私のテストでは、今、この(getTargetContextにスワップを注意してください)のように見えます。今私は実際にテストを実装することができます。うまくいけば、これは誰かを助けるでしょう

小道具this random answerに、文脈のリストは私を助けたものです。

+0

ニース、それはあなたがそれを理解したように見えます。 –

+1

うん、助けてくれてありがとう@JaredBurrows! –

関連する問題