我有一个最近迁移到Android Studio(和gradle)的项目。我现在想为它创建一套测试。不幸的是,我不确定如何在Android Studio中执行此操作(在Eclipse ADT中它非常简单)。
我有以下文件结构:
我的build.gradle看起来像:
apply plugin: 'android'
repositories {
maven { url 'libs'}
}
sourceSets {
testLocal {
java.srcDir file('src/test/java')
resources.srcDir file('src/test/resources')
}
}
dependencies {
compile 'com.larswerkman.holocolorpicker:holocolorpicker:1.1'
compile fileTree(dir: 'libs', include: '*.jar')
testLocalCompile 'junit:junit:4.8.2'
testLocalCompile 'com.google.android:android:4.0.1.2'
testLocalCompile 'com.google.android:support-v4:r6'
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
testPackageName "com.glasstowerstudios.stainedglass.test"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
}
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
我创建的测试称为AllTests.java
,它现在只有一个断言(我只是想在实现实际测试逻辑之前设置测试框架:
import junit.framework.Assert;
import junit.framework.TestCase;
package com.glasstowerstudios.stainedglass.test;
public class AllTests extends TestCase {
public void setUp() {
}
public void tearDown() {
}
public void testStartup() {
Assert.assertEquals(true, true);
}
}
当我运行构建它成功时,即使我从命令行执行gradle localTest
。但是,在Android Studio内部,当我右键单击AllTests.java并选择Run AllTests
时,我收到以下错误:
Error running 'AllTests':
Class 'AllTests' not found in module 'stainedglass'
我认为这与我创建测试的方式有关(在测试内部一次创建一个目录/然后通过New
创建文件 - > File
。所以,我想也许它只是简单地没有添加到模块中,就像src/main/java
目录一样(你可以在图中看到这一点 - src/main/java
是蓝色的,而{ {1}}仍为橙色。
在Android Studio中为现有代码创建测试结构的“正确”方法是什么?