Android 单元和功能测试的Gradle项目

Android 单元和功能测试的Gradle项目,android,android-gradle-plugin,Android,Android Gradle Plugin,我首先为我的应用程序创建了一个功能测试,它运行良好。 然后我添加了单元测试(使用Robolectric+Roboguice+Mockito),它们也可以正常工作。然而,现在我的功能测试甚至无法启动,引发异常,如:java.lang.NoClassDefFoundError:com.bla.bla.MainActivity 我花了几个小时(幸运的是在SO的某个地方读到了提示,但我丢失了它,无法链接到它),我需要检查logcat输出以获取真实信息。这指出有很多问题,因为代码是用Robolectric

我首先为我的应用程序创建了一个功能测试,它运行良好。 然后我添加了单元测试(使用Robolectric+Roboguice+Mockito),它们也可以正常工作。然而,现在我的功能测试甚至无法启动,引发异常,如:java.lang.NoClassDefFoundError:com.bla.bla.MainActivity

我花了几个小时(幸运的是在SO的某个地方读到了提示,但我丢失了它,无法链接到它),我需要检查logcat输出以获取真实信息。这指出有很多问题,因为代码是用Robolectric的影子类编译的。。。 因此,为了解决这个问题,我认为我需要创建两个单独的任务(或至少一个新任务),分别处理单元测试的编译和功能测试的编译

我的单元测试在:
\src\androidTest\java\com\bla\bla\tests

我的功能测试(希望很快会是测试)在:
\src\androidTest\java\com\bla\bla\tests\functional

那么,实现这一目标需要采取哪些步骤? 我想我需要创建新的源代码集,但是如何判断哪些文件应该存在,我只需要测试文件(只需要\src\androidTest\java\com\bla\bla\tests\functional中的文件)还是还需要应用程序源文件。 我一直在寻找类似quickstart的例子,一些有文档记录的东西,这样我就可以很容易地消化它(因为我已经为此问题耽误了一天),但没有成功。也许我没有寻找正确的关键字,所以如果你知道这样的事情,一个链接也会很有帮助

这是我的build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 17
        applicationId "com.bla.bla"
        testApplicationId "com.bla.bla.tests"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    sourceSets {
        instrumentTest.setRoot('src/androidTest')
    }

    packagingOptions {
        exclude 'LICENSE.txt'
    }

}

dependencies {

    androidTestCompile files('libs/robolectric-2.4-jar-with-dependencies.jar')
    androidTestCompile files('libs/robotium-solo-5.2.1.jar')
    androidTestCompile 'junit:junit:4.11'
    androidTestCompile files('libs/javax.inject-1.jar')
    androidTestCompile files('libs/jsr305-1.3.9.jar')
    androidTestCompile files('libs/mockito-core-1.9.5.jar')
    androidTestCompile files('libs/roboguice-2.0.jar')


    compile files('libs/weberknecht.jar')
    compile files('libs/gson-2.2.4.jar')
    compile files('libs/javax.inject-1.jar')
    compile files('libs/guice-3.0-no_aop.jar')
    compile files('libs/roboguice-2.0.jar')
}
我正在使用:

  • Android Studio 0.8.10
  • com.android.tools.build:gradle:0.12.2(我猜这是安卓gradle插件)
  • 格拉德尔1.12

我在GitHub中创建了一个项目(主要用于个人使用,但可以随意复制)。
它有单元测试(Robolectric和Mockito)和仪器测试(Espresso)。作为奖励,它还与截击相结合。我之所以使用它,是因为它可以帮助我启动大多数项目,但是那里的构建脚本和文件夹结构应该可以回答您的问题。我还包括了其他帮助实现这一目标的项目的所有链接。请记住,这是一项正在进行的工作。

如何编译和组装测试apk?使用assembleDebugTest任务?是的,抱歉,忘记了最重要的部分,即如何使用它!实际上,AssembedDebugTest将编译测试apk,但您可能需要以下任务:“gradlew test”仅运行单元测试,“gradlew connectedAndroidTest”运行插装测试。理论上,“gradlew check”应该运行所有这些功能,但我认为还没有设置任务依赖关系。稍后我会添加它。实际上,很抱歉,“gradlew check”不应该运行检测测试,只应该运行单元和lint检查。所以它是好的,因为它是。我有一些问题的汇编。找不到外部依赖项。。。但我并没有做出所有的改变。在单元测试的子包中,我仍然有我的工具(功能)测试,我认为有一个必要的更改。也许明天我会继续。谢谢,到目前为止这很有帮助。我将检测测试放在
\src\androidTest\java\com\bla\bla\tests\functional
中,并设置
testApplicationId“com.bla.bla.tests.functional”
。然后我将我的单元测试放在`\src\test\java\com\bla\bla`中,最后一切正常。