Intereting Posts
Как я могу сделать двух слушателей карт Google? setOnCameraChangeListener Почему главный поток VMWAIT-ing? Phonegap Android Geolocation watchPosition timeout Как я могу получить высоту клавиатуры текущего метода ввода, не показывая его? Android: обнаружение перезапуска службы с помощью START_REDELIVER_INTENT Есть ли способ подавить предупреждение о низком заряде батареи на устройствах Android или отклонить всплывающее окно предупреждения? Roboguice: использование ручных инъекций вызывает ConfigurationException (реализация не была связана) Как отправить приложение для приложения fb, например, приложение Kiwi Размер .apk увеличивается с увеличением с помощью целевых устройств (LDPI, MDPI, HDPI, X-Large Screens) Отключить домашнюю кнопку в приложении android toddler? Как искать NULL в запросе и базе данных БД Android в отборе Android – Как изменить textColor в TimePicker? Как заставить глубокий сон на телефоне Android для тестирования Как я могу посмотреть локальные проекты с эмулятором Android SDK? В чем разница между ArrayAdapter, BaseAdapter и ListAdapter

Невозможно заставить Robotium работать в Android Studio

Я изо всех сил пытаюсь заставить Robotium работать над основанной на граде Android Studio, и я не могу найти способ сделать это

Это мой файл build.gradle

buildscript { dependencies { repositories { mavenCentral() mavenLocal() } classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android' repositories { mavenCentral() /* maven { url "https://oss.sonatype.org/content/repositories/snapshots" }*/ } sourceSets { testLocal { java.srcDir file('src/test/java') resources.srcDir file('src/test/resources') } } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 15 targetSdkVersion 17 } sourceSets { instrumentTest.setRoot('src/test') } } dependencies { compile 'com.android.support:support-v4:13.0.+' // Dependencies for the `testLocal` task, make sure to list all your global dependencies here as well testLocalCompile 'junit:junit:4.11' testLocalCompile 'com.google.android:android:4.1.1.4' testLocalCompile 'com.android.support:support-v4:13.0.+' testLocalCompile 'org.robolectric:robolectric:2.1.+' testLocalCompile 'com.jayway.android.robotium:robotium-solo:4.2' // Android Studio doesn't recognize the `testLocal` task, so we define the same dependencies as above for instrumentTest // which is Android Studio's test task instrumentTestCompile 'junit:junit:4.11' instrumentTestCompile 'com.google.android:android:4.1.1.4' instrumentTestCompile 'com.android.support:support-v4:13.0.+' instrumentTestCompile 'org.robolectric:robolectric:2.1.+' instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.2' } task localTest(type: Test, dependsOn: assemble) { testClassesDir = sourceSets.testLocal.output.classesDir android.sourceSets.main.java.srcDirs.each { dir -> def buildDir = dir.getAbsolutePath().split('/') buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/') sourceSets.testLocal.compileClasspath += files(buildDir) sourceSets.testLocal.runtimeClasspath += files(buildDir) } classpath = sourceSets.testLocal.runtimeClasspath } check.dependsOn localTest 

Как вы можете видеть, я использую Robolectric и Robotium. У меня есть проблема, когда я пытаюсь создать тест Robotium, как этот:

 import android.test.ActivityInstrumentationTestCase2; import com.dlv.testing.MainActivity; import com.jayway.android.robotium.solo.Solo; public class MainActivityUITest extends ActivityInstrumentationTestCase2<MainActivity> { private Solo solo; public MainActivityUITest() { super(MainActivity.class); } public void setUp() throws Exception { solo = new Solo(getInstrumentation(), getActivity()); } public void testStuff() throws Exception { solo.assertCurrentActivity("Check on first Activity", MainActivity.class); solo.sendKey(Solo.MENU); } @Override public void tearDown() throws Exception { solo.finishOpenedActivities(); } } 

Он не может найти никакого импорта, проект не подлежит компиляции в Android Studio, он просто терпит неудачу, когда я запускаю тесты, и если я удалю класс и ссылки в зависимостях, Robolectric работает просто отлично

Насколько я могу судить, вы еще не можете успешно запускать какие-либо тесты из Android Studio (см. Как создавать тесты в Android Studio? ). Вам нужно сделать это из командной строки (обратите внимание, что вам может потребоваться очистить сначала ./gradlew clean ):

Для запуска инструментальных ./gradlew connectedInstrumentTest используйте ./gradlew connectedInstrumentTest

Чтобы запустить тестовую задачу, используйте ./gradlew localTest

В будущем, когда Android Studio работает лучше с интеграцией тестов, вы можете настроить его для выполнения любой заданной задачи Gradle. Перейдите в «Редактировать конфигурации» и нажмите кнопку «+», чтобы добавить новую. Выберите «Gradle», а затем настройте его, чтобы указать правильный файл gradle.build и задачу, которую вы хотите запустить. Однако я не уверен, что вы добавили в раздел «Перед запуском», если что-нибудь.

Все, что было сказано, вот как я получил тесты на роботизм:

  1. Я использовал встроенную конфигурацию тестового теста, потому что я не мог заставить задачу localTest работать (у меня были те же ошибки, что и у вас там, где они не могли найти импорт). Я использовал структуру папок по умолчанию с папкой instrumentTest , но похоже, что вы можете просто использовать строку instrumentTest.setRoot('src/test') чтобы она работала одинаково с вашей настройкой.

  2. Я настроил файл build.gradle следующим образом:

     buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android' repositories { mavenCentral() } dependencies { // Included library modules ... // My regular dependencies compile 'com.android.support:support-v4:13.0.0' ... // Test dependencies. Notice that all I have to include is robotium // because the rest just works using the instrumentTest configuration instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.3' } android { compileSdkVersion 17 buildToolsVersion "18.0.1" defaultConfig { minSdkVersion 7 targetSdkVersion 16 } } 
  3. Я добавил библиотеку robotium в Project Structure ( command-; на моем mac) в качестве библиотеки maven.

  4. Затем я написал тест следующим образом:

     import android.test.ActivityInstrumentationTestCase2; import com.example.activity.WelcomeScreen; import com.jayway.android.robotium.solo.Solo; public class WelcomeScreenTest extends ActivityInstrumentationTestCase2<WelcomeScreen> { private Solo solo; public WelcomeScreenTest() { super(WelcomeScreen.class); } protected void setUp() throws Exception { super.setUp(); solo = new Solo(getInstrumentation(), getActivity()); } public void testActivity() { // robotium assert solo.assertCurrentActivity("Welcome Screen", WelcomeScreen.class); // junit assert assertEquals(true, true); } } 
  5. Затем я провел тест через командную строку ./gradlew connectedInstrumentTest и это сработало для меня.