Я впервые создал функциональный тест для своего приложения, и он отлично работает. Затем я добавил модульные тесты (используя Robolectric + Roboguice + Mockito), и они также отлично работают. Тем не менее, теперь мой функциональный тест даже не запускается, исключая исключение, например, Caused by: java.lang.NoClassDefFoundError: com.bla.bla.MainActivity
Проект Gradle для модульных и функциональных тестов
Мне потребовалось несколько часов (и удача, чтобы прочитать подсказку где-нибудь в 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
Как вы собираете и собираете тест apk? С задачей ** assembleDebugTest **? – helleye
Да, извините, забыли самую важную часть, вот как вы ее используете! Действительно, assemblyeDebugTest скомпилирует тест apk, но вам, вероятно, понадобятся следующие задачи: «gradlew test» для запуска только модульных тестов и «gradlew connectedAndroidTest» для запуска контрольных тестов. Теоретически «gradlew check» должен запускать все из них, но я думаю, что зависимость задачи еще не установлена. Я добавлю его позже. –
На самом деле извините, 'gradlew check' не должен запускать контрольно-измерительные тесты, а только контрольные единицы и линта. Так что все в порядке. –