2014-03-07 54 views
5

我编写了一个简单的测试用例类,并将其放置在Android Studio的默认测试目录中:“src/androidTest”。我创建了一个Android测试版本配置,用于查找模块中的所有测试。当我运行构建配置时,我的测试不会执行,并在logcat中收到以下消息:W/TestGrouping﹕ Invalid Package: '' could not be found or has no tests。如果我指定了测试包或者甚至是特定的测试类,我会得到类似找不到的消息。Android Studio未找到TestCase类

我的测试类如下:

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(与app目录同行)看起来像这样。

// 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 androidTest java main java res

+0

包含您的项目目录结构以进行测试。 – pyus13

回答

4

的androidTest/java目录下的封装结构需要精确地平行主/ java目录下的结构上方

我的问题是,根据主封装结构是com.mydomain.myapp.subpackage和目录结构下droidTest是com.mydomain.myapp.subpackage.somethingelse

一旦包装结构匹配,测试就被发现并且完美无瑕地执行。

+0

有趣。我不会有这个要求。您应该能够将代码放在“com.mydomain.myapp.subpackage”中,并在“com.mydomain.myapp.subpackage.test”中进行测试,但如果您这样做,则需要了解受保护的/软件包范围。 – swooby

+0

我也不会这么想。我没有看到任何地方记录,它可能只是在加拿大版Android Studio中的一个错误。但是,目录结构是我做出的唯一改变,当它开始工作时。 – joates

0

请发表你的整个的build.gradle文件。
您使用的是什么版本的'com.android.tools.build:gradle'?
在0.8,默认的测试路径是“instrumentTest/JAVA/......“。
在0.9,默认的测试路径改为 ”androidTest/JAVA/...“。

要使用androidTest,你应该有:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.9.+' 
    } 
} 
+0

是的,好的想法,这个信息是在我上面编辑的顶层build.gradle中。仍然没有骰子。 – joates

4

您不必真正重建src目录的结构来创建适当的测试。

测试类和测试类应该在同一个包中。

但是至于文件夹,它们应该分开。所以,对于测试和正常来源,我们使用不同的根源。

问题是,如何设置这些根。在AS 1.5(或许更早版本可以做到这一点,太),它可以轻松完成:

  1. 几乎目录没有任何结构。它的某个地方有测试来源的根目录。右键点击它并且Mark Directory As ... Sources Root
  2. 为测试制作另一个任意目录结构。它的某处有测试源的根目录。右键点击它并Mark Directory As ...Test Sources Root

在这些根的路径的测试类必须是相同的路径,以从它的根被测试类,用于沿着这些路径dir名称定义包和它们应该相同。但你不必担心根源之上的结构。

使用此方法,您可以将测试添加到任何现有的资源结构。如果你自己创造了这个结构,那就把它变得比较传统。

编辑。注意,Java 9模块的文件夹结构绝对不同。

+0

我从来没有发现,我来到STS intellij,并习惯于配置约定。谢谢 – Wudang

+0

忘记会议:-)现在我正在玩Java9模块化系统,并且那里的文件夹结构绝对是特殊的和不同的。 – Gangnus

相关问题