2016-07-11 2 views
16

Я создал пустой проект по умолчанию на Android Studio 2.1.2 с API 24. В примере проекта, Google предлагает Остаточная класс ApplicationTestCase:ApplicationTestCase устарел на уровне API 24

This class was deprecated in API level 24. Use ActivityTestRule instead. New tests should be written using the 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 Test Case теперь осуждается? Как заменить ApplicationTestCase на ActivityTestRule?


EDIT:

Стараюсь с 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 in my 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' 

My conclusion is that for the moment neither Android Test Case nor Expresso works on Android API 24. Is this right?


EDIT: 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' 
} 
+0

«андроид прибегая к помощи эспрессо» – hanbumpark

+0

@HanbumBak Я не могу найти учебник по Api 24 –

+0

Относно ошибки конфликта зависимость см: [это ответ] (http://stackoverflow.com/questions/38181587/android-version-24-0-0-and-espresso-2-0-gradle-exception/38182270#38182270) – thaussma

ответ

11

Новый 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.

Соответствующий dependencies участок в build.gradle выглядит следующим образом:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
    exclude group: 'com.android.support', module: 'support-annotations' 
}) 
+0

Хорошо, но как вы меняете 'ApplicationTestCase' ? Он обрабатывает настройку приложения и разрывы между каждым тестовым случаем. – TWiStErRob

+0

@TWiStErRob Просто добавьте методы в свой тестовый пример и отметьте их с помощью @ @ Before' и '@ After' от JUnit и выполните свои действия по установке/разрыву. – friederbluemle

+3

Я знаю, что мой вопрос был более целенаправленно: что такое содержимое этих методов ** правильно ** создавать каждый экземпляр 'Application' каждый раз, не протекая, конфликтуя и иметь экземпляр, созданный в этом тесте, доступный через« контекст ». getApplicationContext() 'где необходимо внутри приложения? – TWiStErRob

Смежные вопросы