web-dev-qa-db-ja.com

APIレベル24で廃止されたApplicationTestCase

Android Studio 2.1.2でデフォルトの空のプロジェクトを作成し、API 24。サンプルプロジェクトでは、Googleは減価償却クラスApplicationTestCaseを提供しています。

このクラスはAPIレベル24で廃止されました。代わりにActivityTestRuleを使用してください。新しいテストはAndroid Testing Support Libraryを使用して作成する必要があります。

サンプル:

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

私の質問:なぜAndroidテストケースは廃止されましたか?ApplicationTestCaseをActivityTestRuleに置き換える方法は?


編集:

私はExpressoで試しますが、API 24compileSdkVersion 24)このエラーがあります:

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.

このlibを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'

私の結論は、現時点ではAndroidテストケースExpressoAndroid API 24で動作します。これは正しいですか?


編集:2016-08-05

Expressoの以前のエラーを修正します:

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'
}
26
lopez.mikhael

新しいandroidTestのベータ版Android Studio 2.2が生成する例は、次のようになります。

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

非推奨の警告が示唆するように、新しいインストルメンテーションテストでは、InstrumentationRegistryから拡張する代わりにAndroidTestCaseを使用する必要があります。 AndroidJUnit4で実行します。

build.gradleの関連dependenciesセクションは次のようになります。

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

APIドキュメントに示されているように、APIは非推奨になり、代わりにInstrumentationRegistry.getTargetContext()を使用すると、アプリケーションクラスのonCreateメソッドが呼び出されます。

getTargetContextは、ApplicationStartupService Android Manifest as below)で定義されたクラスを呼び出します。

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