简体   繁体   English

无法让Robotium在Android Studio中运行

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

I'm struggling to get Robotium to work on the gradle-based Android Studio and I can't find the way to do it 我很难让Robotium在基于gradle的Android Studio上工作,我找不到办法

This is my build.gradle file 这是我的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

As you can see, I'm using Robolectric and Robotium The problem I've got is whenever I try to create a Robotium test, like this one: 正如你所看到的,我正在使用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();
    }
}

it cannot find any import, the project does not fail to compile in Android Studio, it just fails when I run the tests and if I remove the class and the references in the dependences, Robolectric works just fine 它无法找到任何导入,项目在Android Studio中无法编译,它只是在我运行测试时失败,如果我删除了类和依赖项中的引用,Robolectric工作得很好

As far as I can tell, you can't successfully run any tests from Android Studio yet (see How can I create tests in Android Studio? ). 据我所知,你还无法从Android Studio成功运行任何测试(请参阅如何在Android Studio中创建测试? )。 You need to do it from the command line (note that you may need to clean first ./gradlew clean ): 您需要从命令行执行此操作(请注意,您可能需要首先清理./gradlew clean ):

To run the instrumentTests, use ./gradlew connectedInstrumentTest 要运行instrumentTests,请使用./gradlew connectedInstrumentTest

To run your test task, use ./gradlew localTest 要运行测试任务,请使用./gradlew localTest

For future reference when Android Studio works better with test integration, you can set it up to run any given Gradle task. 为了将来参考Android Studio与测试集成更好地协作,您可以将其设置为运行任何给定的Gradle任务。 Go to 'Edit Configurations' and click the '+' button to add a new one. 转到“编辑配置”,然后点击“+”按钮添加新按钮。 Choose 'Gradle' and then configure it to point to the correct gradle.build file and the task you want to run. 选择“Gradle”,然后将其配置为指向正确的gradle.build文件和要运行的任务。 I'm not sure what you would add in the 'Before launch' section, however, if anything. 我不确定你会在'发布之前'部分添加什么,但是,如果有的话。

All that being said, here's how I got my robotium tests to run: 所有这一切,这就是我如何运行我的机器人测试:

  1. I used the built-in Instrument Test configuration because I couldn't get the localTest task to work (I got the same errors as you did where it couldn't find any imports). 我使用了内置的仪器测试配置,因为我无法使localTest任务工作(我得到了与你无法找到任何导入时相同的错误)。 I used the default folder structure with the instrumentTest folder, but it looks like you can just use the line instrumentTest.setRoot('src/test') to make it work the same with your setup. 我使用了instrumentTest文件夹的默认文件夹结构,但看起来你可以使用instrumentTest.setRoot('src/test')这一行来使它与你的设置一样。

  2. I configured my build.gradle file like this: 我配置了我的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. I added the robotium library in Project Structure ( command-; on my mac) as a maven libary. 我在项目结构中添加了robotium库( command-;在我的mac上)作为maven库。

  4. I then wrote a test like this: 然后我写了一个这样的测试:

     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. I then ran the test via the command line ./gradlew connectedInstrumentTest and it worked for me. 然后我通过命令行./gradlew connectedInstrumentTest运行测试,它对我./gradlew connectedInstrumentTest

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

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