繁体   English   中英

无法让Robotium在Android Studio中运行

[英]Unable to get Robotium to work in Android Studio

我很难让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成功运行任何测试(请参阅如何在Android Studio中创建测试? )。 您需要从命令行执行此操作(请注意,您可能需要首先清理./gradlew clean ):

要运行instrumentTests,请使用./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库( 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运行测试,它对我./gradlew connectedInstrumentTest

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM