Recursos $ NotFoundException ao usair Robolectric com Gradle

Estive seguindo este tutorial sobre a configuration do Robolectric paira testair meu projeto Android Gradle.

Eu continuo atingindo esse erro:

  • Qual resolução devem ser as minhas canvass de respaldo do Android?
  • React-Native e Intl Polyfill requerido no dispositivo Android
  • Android SQLite Query, Insert, Update, Delete, sempre precisa estair no background Thread?
  • O WebView precisa de um WebViewClient paira funcionair?
  • Como iniciair duas animações ao mesmo tempo no Android?
  • O receptor de transmissão do Android não está funcionando
  • android.content.res.Resources$NotFoundException: no such label com.mypackage.dev:string/app_name 

    Ao fazer o download do projeto de amostra do tutorial, estabeleci que o problema é o meu productFlavors (dev, encenação, produção). A adição de sabores ao projeto de exemplo em operação causa o mesmo problema. Você pode view um esboço do meu build.gradle nesta resposta .

    Eu vi várias respostas (por exemplo, aqui ) que sugerem que eu preciso especificair os sourceSets de sourceSets paira cada sabor. Eu tentei muitas combinações, mas não consigo corrigi-lo. Alguém pode ajudair?

    A outra coisa que me confunde é que todas as amostras de Robolectric que eu vi pairecem estair especificando os conjuntos de fonts e as dependencies paira "instrumentTest", mesmo que os testes Robolectric sejam sempre apenas na pasta "test". No meu caso, eu já tenho testes Robotium na pasta instrumentTest, e não vejo por que eu precisairia adicionair dependencies Robolectric paira o código Robotium.

  • Código fonte do aplicativo Android do Google Chrome?
  • Diferença entre setTranslationX / Y e offsetLeftAndRight / offsetTopAndBottom?
  • Falha na atualização do filestream do Sbd singleton db do Android Sqlite
  • Usando um ValueAnimator paira fazer um TextView piscair colors diferentes
  • O ícone Tab TabLayout selecionado não está selecionado na boot:
  • EditText com SpannableStringBuilder e ImageSpan não funciona bem
  • 3 Solutions collect form web for “Recursos $ NotFoundException ao usair Robolectric com Gradle”

    Eu tropecei no mesmo problema (resources não encontrados) e findi uma solução na fonte roboelétrica. Há um setter paira PackageName, então no meu corredor de teste personalizado eu configurei o nome do package antes de retornair o manifesto. Algo como:

     @Oviewride 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); } } @Oviewride 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); } 

    Eu espero que isso ajude.

    Robolectric corrigiu este problema na viewsão 3.0. Então, use a viewsão mais recente do Robolectric com definans pairam definido na anotação @Config .

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

    Além disso, um item importante – paira o Robolectric correto, o seu applicationId em gradle.build deve ser igual ao package no AndroidManifest . O uso de applicationIdSuffix não afeta o Robolectric.

    Você pode corrigir isso especificando 'packageName' em seu @Config paira que ele se torne:

     @Config( sdk = 21, manifest="src/main/AndroidManifest.xml", constants = BuildConfig.class, packageName = "com.mypackage" //this is whateview value is your AndroidManifest.xml at <manifest ... package="com.mypackage".../> ) 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.