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