用于单元和功能测试的Gradle项目

时间:2014-09-24 15:02:06

标签: android android-gradle

我首先为我的应用程序创建了一个功能测试,它运行正常。 然后我添加了单元测试(使用Robolectric + Roboguice + Mockito),它们也正常工作。但是,现在我的功能测试甚至无法启动,抛出像Caused by: 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

那么实现这一目标需要哪些步骤? 我想我需要创建新的sourceSet,但是如何判断哪些文件应该存在并且我只需要测试文件(只有\ src \ androidTest \ java \ com \ bla \ bla \ tests \ functional中的文件)或者我也需要应用程序源文件。 我一直在寻找像快速入门的例子,记录下来的东西,以便我可以轻松地消化它(因为我已经为这个问题丢了一天),但没有成功。也许我不是在寻找正确的关键字,所以如果你知道这样的话,链接也会非常有用。

这是我的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(我想这是android gradle插件)
  • gradle 1.12

1 个答案:

答案 0 :(得分:0)

我在GitHub中创建了一个项目(主要供个人使用,但可以随意复制)。 https://github.com/tas-morf/AndroidUnitTestTemplate 它有单元测试(使用Robolectric和Mockito)和仪器测试(使用Espresso)。作为奖励,它还与凌空相结合。我只是使用它,因为它可以帮助我启动我的大部分项目,但是那里的构建脚本和文件夹结构应该回答你的问题。我还包括了其他帮助实现这一目标的项目的所有链接。请记住,这是一项正在进行的工作。