我已经编写了一个简单的测试用例类,并将其放置在Android Studio的默认测试目录中:“src/androidTest”。我创建了一个Android测试构建配置,用于查找模块中的所有测试。当我运行构建配置时,我的测试没有执行,我在logcat中收到以下消息:W/TestGrouping·无效包:“找不到或没有测试
。如果我指定测试包甚至特定的测试类,我会收到类似的类未找到消息。
我的测试类如下:
public class FirstTest extends InstrumentationTestCase {
public void testSample() {
final int expected = 1;
final int reality = 5;
assertEquals(expected, reality);
}
}
我的build. gradle文件如下所示:
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:gridlayout-v7:19.0.1'
compile 'com.android.support:support-v4:19.0.1'
compile 'com.android.support:appcompat-v7:19.0.1'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
我正在运行android gradle插件的0.9版。我的顶级build. gradle(与应用程序目录对等)如下所示。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
allprojects {
repositories {
mavenCentral()
}
}
我的项目目录结构如下:
app src androidTestjava主要javares
如果您要从androidTest文件夹运行测试,您应该选择Android InstrumentedTest下的配置,而不是junit。
运行(顶部工具窗口)/编辑配置…
androidTest/java目录下的包结构需要与main/java目录下的结构完全并行。
我上面的问题是main下的包结构是com. mydomain.myapp.subpack
,androidTest下的目录结构是com.mydomain.myapp.subpackage.有东西
。
一旦包结构匹配,测试就会被发现并完美地执行。
被测和测试类应该在同一个包中。
但是对于文件夹,它们应该分开。因此,对于测试和正常来源,我们使用不同的根。
问题是,如何设置这些根。在AS 1.5中(也许早期版本也可以做到),它可以很容易地完成:
将目录标记为
…来源Root
。测试源根
。在这些根下,测试类的路径必须与从根到测试类的路径相同,因为沿着这些路径的目录名称定义了包,它们应该是相同的。但是你不必担心根上面的结构。
使用此方法,您可以将测试添加到任何现有的源结构中。如果您自己创建结构,请使其相当传统。
请注意,Java9模块的文件夹结构完全不同。