【问题标题】:Unable to get Robotium to work in Android Studio无法让 Robotium 在 Android Studio 中工作
【发布时间】:2013-09-17 01:24:35
【问题描述】:

我正在努力让 Robotium 在基于 gradle 的 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 运行 robolectric 测试。查看big nerd ranch的以下链接

标签: android gradle robotium android-testing ui-testing


【解决方案1】:

据我所知,您还不能从 Android Studio 成功运行任何测试(请参阅 How can I create tests in Android Studio?)。你需要从命令行来做(注意你可能需要先清理./gradlew clean):

要运行仪器测试,请使用./gradlew connectedInstrumentTest

要运行您的测试任务,请使用./gradlew localTest

为了将来在 Android Studio 与测试集成更好地配合时参考,您可以将其设置为运行任何给定的 Gradle 任务。转到“编辑配置”并单击“+”按钮添加一个新配置。选择“Gradle”,然后将其配置为指向正确的 gradle.build 文件和您要运行的任务。不过,如果有的话,我不确定您会在“发布前”部分添加什么。

说了这么多,下面是我运行robotium测试的方法:

  1. 我使用了内置的 Instrument Test 配置,因为我无法让 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. 我在项目结构(我的 mac 上的 command-;)中添加了 robotsium 库作为 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 运行了测试,它对我有用。

【讨论】:

  • 我运行它时得到的只是:错误:com.jayway.android.robotium.solo 包不存在 import com.jayway.android.robotium.solo.Solo;
  • 我仍然错过了这个难题的另一部分。当我做这一切时,它说“包 com.jayway.android.robotium.solo 不存在”。只有当我添加“compile 'com.jayway.android.robotium:robotium-solo:4.3'”时它才能工作。但这看起来像是包含我的测试类作为项目源代码的一部分,不是吗?
  • 记得在添加instrumentTestCompile pragma 后重启/重新导入项目——这让我在编写第一个测试时有点头疼(robotium 导入不可用)——经过测试并证明可以在 Android Studio 上工作0.4.2.
猜你喜欢
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2019-12-30
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多