2014-02-28 4 views
15

내 Android Gradle 프로젝트를 테스트하기 위해 Robolectric 설정시 this tutorial을 따라 왔습니다.

이 오류를 타격 계속 :

android.content.res.Resources$NotFoundException: no such label com.mypackage.dev:string/app_name 

튜토리얼에서 샘플 프로젝트를 다운로드하면 나는 문제가 내 productFlavors (dev에, 스테이징, 생산)입니다 설립했습니다. 작업 샘플 프로젝트에 맛을 추가하면 같은 문제가 발생합니다. 내 build.gradle in this answer의 윤곽을 볼 수 있습니다.

각 맛에 대해 sourceSets을 지정해야한다고 제안하는 다양한 답변 (예 : here)을 보았습니다. 나는 많은 조합을 시도했지만 올바르게 받아 들일 수는 없습니다. 아무도 도와 줄 수 있니?

Robolectric 테스트는 항상 "테스트"폴더에만 있지만, 내가 본 모든 Robolectric 샘플은 "instrumentTest"에 대한 sourceSets 및 종속성을 지정하는 것 같습니다. 제 경우에는 이미 instrumentTest 폴더에 Robotium 테스트가 있습니다. Robotium 코드에 Robolectric 종속성을 추가해야하는 이유는 알 수 없습니다.

답변

1

동일한 문제 (리소스를 찾을 수 없음)가 발생하여 robolectric 소스에 대한 해결책을 찾았습니다. PackageName의 설정자가 있으므로 사용자 정의 테스트 러너에서 매니페스트를 반환하기 전에 패키지 이름을 설정합니다. 예 :

@Override protected AndroidManifest getAppManifest(Config config) { 
    String manifestProperty = System.getProperty("android.manifest"); 
    if (config.manifest().equals(Config.DEFAULT) && manifestProperty != null) { 
     String resProperty = System.getProperty("android.resources"); 
     String assetsProperty = System.getProperty("android.assets"); 
     AndroidManifest manifest = new AndroidManifest(Fs.fileFromPath(manifestProperty), Fs.fileFromPath(resProperty), 
       Fs.fileFromPath(assetsProperty)); 
     manifest.setPackageName("com.mypackagename"); 
     return manifest; 
    } 
    return super.getAppManifest(config); 
} 

이 정보가 도움이되기를 바랍니다.

0

Robolectric이 버전 3.0에서이 문제를 해결했습니다. 따라서 최신 버전의 Robolectric을 @Config annotation에 정의 된 const 매개 변수와 함께 사용하십시오.

@Config(
     sdk = 21, 
     manifest = "src/main/AndroidManifest.xml", 
     constants = BuildConfig.class 
) 

@RunWith(RobolectricTestRunner.class) 

또한, 하나 개의 중요한 항목 - 올바른 Robolectric에 대한 AndroidManifestapplicationId해야 gradle.buildpackage에 동일 작동합니다. applicationIdSuffix의 사용은 Robolectric에 영향을 미치지 않습니다. 이되도록

0

당신은 당신의 @Config에 '여기서 packageName'를 지정하여이 문제를 해결할 수 있습니다

@Config(
     sdk = 21, 
     manifest="src/main/AndroidManifest.xml", 
     constants = BuildConfig.class, 
     packageName = "com.mypackage" //this is whatever value is your AndroidManifest.xml at <manifest ... package="com.mypackage".../> 
) 
관련 문제