Ошибка инструментария из-за "java.io.FileNotFoundException"
Я пытаюсь запустить тесты на измерительные приборы на Travis CI. Я получаю эту ошибку, когда сборка работает на Travis. Тем не менее, у меня нет проблем с локальным тестированием. Я новичок в разработке Android/Java, поэтому я даже не знаю, с чего начать.
...
:MyappAndroid:packageMyappDebugAndroidTest
:MyappAndroid:assembleMyappDebugAndroidTest
:MyappAndroid:connectedMyappDebugAndroidTest
Tests on test(AVD) - 6.0 failed: Instrumentation run failed due to 'java.io.FileNotFoundException'
com.android.builder.testing.ConnectedDevice > No tests found.[test(AVD) - 6.0] FAILED
No tests found. This usually means that your test classes are not in the form that your test runner expects (e.g. don't inherit from TestCase or lack @Test annotations).
:MyappAndroid:connectedMyappDebugAndroidTest FAILED
...
Вот один из моих тестов, которые я ожидаю запустить:
package core.ui.dialogs;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class DialogActivityTest {
@Rule
public ActivityTestRule<DialogActivity> mActivityRule = new ActivityTestRule<>(DialogActivity.class);
@Test
public void testSomething() {
// etc...
}
}
Мой .travis.yml
:
language: android
jdk: oraclejdk7
sudo: false
env:
global:
- ANDROID_API_LEVEL=23
- BUILD_TOOLS_VERSION=23.0.3
- ANDROID_ABI=armeabi-v7a
- ADB_INSTALL_TIMEOUT=8
android:
components:
- tools
- build-tools-$BUILD_TOOLS_VERSION
- android-$ANDROID_API_LEVEL
- add-on
- extra
before_script:
- echo no | android create avd --force -n test -t android-$ANDROID_API_LEVEL --abi $ANDROID_ABI
- emulator -avd test -no-skin -no-audio -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
script: ./gradlew assembleMyappDebug connectedMyappDebugAndroidTest -PdisablePreDex
Обновление: Вот несколько вещей, которые могут иметь значение в моем build.gradle
:
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 19
targetSdkVersion 23
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
// ...
dependencies {
compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:support-v4:23.1.0'
compile 'com.google.android.gms:play-services-gcm:8.4.0'
compile 'com.google.code.gson:gson:2.3'
compile 'com.squareup.dagger:dagger:1.2.2'
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
// ...
androidTestCompile 'com.squareup:javawriter:2.5.0'
androidTestCompile ('com.android.support.test.espresso:espresso-core:2.0') {
exclude group: 'javax.inject'
}
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
}
Ответы
Ответ 1
Я также новичок в Android, но я попробую помочь вам.
Вы можете ответить на этот ответ:
https://groups.google.com/d/msg/adt-dev/QW5SuzQizNk/mWdaEuuCCQAJ
который ссылается на:
https://github.com/google/dagger/issues/271
В основном это может быть проблема:
Вы могли неправильно использовать compile 'com.google.dagger:dagger-compiler:2.0.2'
.
Правильный apt 'com.google.dagger:dagger-compiler:2.0.2'
а также проверить эту ссылку так же, как ваша проблема
https://googleweblight.com/?lite_url=https://github.com/Shippable/support/issues/1453&ei=a6rzQlWF&lc=en-IN&s=1&m=140&host=www.google.co.in&ts=1471246688&sig=AKOVD67-05kCThujPFkmuySpywKlKpVG-g
Ответ 2
Есть 2 проблемы:
Выпуск # 1:
com.android.builder.testing.ConnectedDevice > Нет тестов найдено. [test (AVD) - 6.0] FAILED
Это уже описано здесь в вашем случае. Обычно это означает, что ваши тестовые классы не соответствуют форме, которую ожидает ваш тестировщик (например, не наследовать от TestCase или отсутствовать аннотации @Test).
Для этого вы можете запустить
gradlew :MyappAndroid:connectedMyappDebugAndroidTest
(где MyappAndroid
- это имя каталога модуля MyappAndroid
), в котором будут выполняться только те тесты MyappAndroid
.
Ссылка на ресурс:
fooobar.com/info/295876/...
Выпуск № 2:
Эта проблема возникает, если какая-то зависимость отсутствует как кинжал.
Как artem-zinnatullin, указанный в сообщение
Проблема заключается в том, что вы компилируете кинжал-компилятор в проект. Я не хочу исследовать, почему он создает проблемы с инструментальными тестами на Android 5+, но в любом случае просто не компилируйте его в apk.
//Вероятно, тестовый бегун использует Dagger 2 внутри себя, и вы его разбиваете с помощью компиляции собственной версии, возможно, они даже используют Dagger 1, имена пакетов одинаковы.
Вы можете использовать APT Gradle Plugin https://bitbucket.org/hvisser/android-apt для запуска компилятора кинг-дро во время компиляции, но не компилируйте его в приложение.
Вот приложение # qualitymatters с инструментальными тестами и кинжалом 2, все работает без проблем, поэтому вы можете взглянуть и посмотрите, как испечь что-то подобное.
Для Gradle пользователей используйте https://github.com/tbroyer/gradle-apt-plugin.
Для пользователей Maven используйте <optional>true</optional>
.
Ссылка на ресурс:
fooobar.com/info/295877/...