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 24(compileSdkVersion 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テストケースもExpressoはAndroid 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'
}
新しい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'
})
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