webentwicklung-frage-antwort-db.com.de

ApplicationTestCase in API-Ebene 24 nicht mehr unterstützt

Ich habe ein leeres Standardprojekt in Android Studio 2.1.2 mit API 24 erstellt. Im Beispielprojekt bietet Google eine abgelehnte Klasse ApplicationTestCase an:

Diese Klasse wurde auf API-Ebene 24 nicht mehr unterstützt. Verwenden Sie ActivityTestRule stattdessen. Neue Tests sollten mit der Android-Testunterstützung .__ geschrieben werden. Bibliothek.

Probe:

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

Meine Frage: Warum ist Android Test Case jetzt veraltet? Wie kann ich ApplicationTestCase durch ActivityTestRule ersetzen?


EDIT:

Ich versuche es mit Expresso, aber auf API 24 (compileSdkVersion 24) habe ich diesen Fehler:

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.

Wenn ich versuche, diese lib in mein build.gradle einzufügen:

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

Meine Schlussfolgerung ist, dass momentan weder Android Test Case noch Expresso auf Android API 24 funktioniert. Ist das richtig?


EDIT: 2016-08-05

Ich behebe den vorherigen Fehler in Expresso so:

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

Das neue androidTest Beispiel, das die Beta-Version von Android Studio 2.2 generiert, sieht folgendermaßen aus:

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

Genau wie die Warnung über die Verleumdung vorschlägt, sollten die neuen Instrumentierungstests InstrumentationRegistry verwenden, anstatt von AndroidTestCase auszugehen. Führen Sie sie mit AndroidJUnit4 aus.

Der relevante dependencies-Abschnitt in build.gradle sieht folgendermaßen aus:

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

Wie in der API-Dokumentation angegeben, wurde die API nicht mehr unterstützt. Stattdessen wird die Verwendung von InstrumentationRegistry.getTargetContext () als Methode onCreate der Klasse Application aufgerufen.

Das getTargetContext ruft die im Android Manifest definierte ApplicationStartupService - Klasse auf.

    <?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