Невозможно заставить Robotium работать в Android Studio
Я изо всех сил пытаюсь заставить Robotium работать с Android-студией gradle, и я не могу найти способ сделать это
Это мой файл 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 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 работает просто отлично
Ответы
Ответ 1
Насколько я могу судить, вы еще не можете успешно запускать тесты из Android Studio (см. Как создать тесты в Android Studio?). Вам нужно сделать это из командной строки (обратите внимание, что вам может понадобиться очистить сначала ./gradlew clean
):
Для запуска инструментальных тестов используйте ./gradlew connectedInstrumentTest
Чтобы запустить тестовую задачу, используйте ./gradlew localTest
В будущем, когда Android Studio работает лучше с интеграцией тестов, вы можете настроить его для запуска любой заданной задачи Gradle. Перейдите в "Редактировать конфигурации" и нажмите кнопку "+", чтобы добавить новую. Выберите "Gradle", а затем настройте его, чтобы указать правильный файл gradle.build и задачу, которую вы хотите запустить. Однако я не уверен, что вы добавили в раздел "Перед запуском", если что-нибудь.
Все, что было сказано, вот как я получил тесты на роботизм:
-
Я использовал встроенную конфигурацию тестового теста, потому что я не мог заставить задачу localTest работать (у меня были те же ошибки, что и у вас там, где они не могли найти импорт). Я использовал структуру папок по умолчанию с папкой instrumentTest
, но похоже, что вы можете просто использовать строку instrumentTest.setRoot('src/test')
, чтобы она работала одинаково с вашей настройкой.
-
Я сконфигурировал файл 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
}
}
-
Я добавил библиотеку robotium в структуру проекта (command-;
на моем mac) в качестве библиотеки maven.
-
Затем я написал тест следующим образом:
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);
}
}
-
Затем я выполнил тест через командную строку ./gradlew connectedInstrumentTest
, и это сработало для меня.