web-dev-qa-db-fra.com

ApplicationTestCase déconseillé dans l'API de niveau 24

J'ai créé un projet vide par défaut sur Android Studio 2.1.2 avec API 24. Dans l'exemple de projet, Google propose une classe dépréciée ApplicationTestCase:

Cette classe était obsolète dans l'API de niveau 24. Utilisez ActivityTestRule au lieu. Les nouveaux tests doivent être écrits avec le support de test Android Bibliothèque.

Échantillon:

import Android.app.Application;
import Android.test.ApplicationTestCase;

/**
 * <a href="http://d.Android.com/tools/testing/testing_Android.html">Testing Fundamentals</a>
 */
public class ApplicationTest extends ApplicationTestCase<Application> {
    public ApplicationTest() {
        super(Application.class);
    }
}

Ma question: Pourquoi Android Test Case est maintenant obsolète? Comment remplacer ApplicationTestCase par ActivityTestRule?


MODIFIER:

J'essaie avec Expresso, mais sur API 24 (compileSdkVersion 24), j'ai l'erreur suivante:

Error:Conflict with dependency 'com.Android.support:appcompat-v7'. Resolved versions for app (24.0.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Error:Conflict with dependency 'com.Android.support:design'. Resolved versions for app (24.0.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Error:Conflict with dependency 'com.Android.support:support-annotations'. Resolved versions for app (24.0.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Error:Conflict with dependency 'com.Android.support:recyclerview-v7'. Resolved versions for app (24.0.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.

Quand j'essaye d'ajouter cette lib dans mon build.gradle:

// Android JUnit Runner
androidTestCompile 'com.Android.support.test:runner:0.5'
// JUnit4 Rules
androidTestCompile 'com.Android.support.test:rules:0.5'
// Espresso core
androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.2.2'
// Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource
androidTestCompile 'com.Android.support.test.espresso:espresso-contrib:2.2.2'
// Espresso-web for WebView support
androidTestCompile 'com.Android.support.test.espresso:espresso-web:2.2.2'
// Espresso-idling-resource for synchronization with background jobs
androidTestCompile 'com.Android.support.test.espresso:espresso-idling-resource:2.2.2'

Ma conclusion est que pour le moment, ni Test Test Android ni Expresso ne fonctionne sur Android API 24. Est-ce correct?


EDIT: 2016-08-05

Je corrige l'erreur précédente sur Expresso comme ceci:

def espressoVersion = '2.2.2'
def testRunnerVersion = '0.5'
androidTestCompile "com.Android.support.test:rules:${testRunnerVersion}"
androidTestCompile "com.Android.support.test.espresso:espresso-core:${espressoVersion}"
configurations.androidTestCompile.dependencies.each { androidTestCompileDependency ->
    androidTestCompileDependency.exclude group: 'com.Android.support'
}
22
lopez.mikhael

Le nouveau androidTest exemple généré par la version bêta d’Android Studio 2.2 se présente comme suit:

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Test
    public void useAppContext() throws Exception {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();

        assertEquals("org.mypackage", appContext.getPackageName());
    }
}

Tout comme l'avertissement de désapprobation suggère, les nouveaux tests d'instrumentation devraient utiliser InstrumentationRegistry au lieu de AndroidTestCase. Exécutez-les avec AndroidJUnit4.

La section dependencies pertinente dans build.gradle se présente comme suit:

androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.Android.support', module: 'support-annotations'
})
16
friederbluemle

Comme indiqué dans la documentation de l'API, l'API est obsolète et l'utilisation d'InstrumentationRegistry.getTargetContext () appelle à son tour la méthode onCreate de votre classe Application.

GetTargetContext appellera la classe ApplicationStartupService définie dans le manifeste Android comme ci-dessous.

    <?xml version="1.0" encoding="utf-8"?>
     <manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
       <application
           Android:name=".service.ApplicationStartupService"

 public class ApplicationStartupService extends Application
 {

       /**
         * Method initializes the application configuration
       */
       @Override
       public void onCreate(){

          super.onCreate();

          this.initResources()
       }

      private void initResource(){
          //do your application init work here.
      }
}

Test Class

  @RunWith(AndroidJUnit4.class)      
  public class ApplicationStartupServiceTest {

  @Test
  public void testResourcesAreInitializedd() throws Exception {
   //do your assertions here.
  }

https://developer.Android.com/reference/Android/test/ApplicationTestCase

0
MG Developer