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