我正在努力让 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 中创建测试? https://stackoverflow.com/questions/16586409/how-can-i-create-tests-in-android-studio)。您需要从命令行执行此操作(请注意,您可能需要先清理./gradlew clean
):
要运行仪器测试,请使用./gradlew connectedInstrumentTest
要运行您的测试任务,请使用./gradlew localTest
为了将来当 Android Studio 更好地与测试集成配合时参考,您可以将其设置为运行任何给定的 Gradle 任务。转到“编辑配置”并单击“+”按钮添加新配置。选择“Gradle”,然后将其配置为指向正确的 gradle.build 文件和要运行的任务。不过,我不确定您会在“启动前”部分添加什么内容,如果有的话。
话虽如此,这就是我如何运行 Robotium 测试:
我使用了内置的 Instrument Test 配置,因为我无法让 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
}
}
我在项目结构中添加了 robotsium 库(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
这对我有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)