我正在尝试在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'
}
答案 0 :(得分:2)
我也是新手,但我会尽力帮助你。
您可以按照以下答案:
https://groups.google.com/d/msg/adt-dev/QW5SuzQizNk/mWdaEuuCCQAJ
链接到:
基本上这可能是问题所在:
您可能错误地使用了if (typeof(Storage) == "undefined")
{
alert("Your browser does not support web storage");
//Abort the script;
//throw new Error("Something went badly wrong!");
}
$time_limit = $("#time_limit").val();
var d = new Date($time_limit);
var hours = d.getHours(); //00 hours
var minutes = d.getMinutes(); //10 minutes
var seconds = 60 * minutes;
if (localStorage.getItem("seconds") !== null)
{
seconds = localStorage.getItem("seconds");
}
function secondPassed()
{
var minutes = Math.round((seconds - 30) / 60);
console.log(minutes);
var hours = Math.round((minutes) / 60);
var remainingSeconds = seconds % 60;
if (remainingSeconds < 10) {
remainingSeconds = "0" + remainingSeconds;
}
document.getElementById('countdown').innerHTML = hours + ":" + minutes + ":" + remainingSeconds;
if (seconds == 0) {
clearInterval(myVar);
document.getElementById('countdown').innerHTML = "Time Out";
} else {
seconds--;
console.log(seconds);
}
localStorage.setItem("seconds",seconds);
}
var myVar = setInterval(secondPassed, 1000);
。
正确的apt compile 'com.google.dagger:dagger-compiler:2.0.2'
并检查此链接与您的问题相同
答案 1 :(得分:1)
有两个问题:
com.android.builder.testing.ConnectedDevice&gt;没有测试 发现。[test(AVD) - 6.0] FAILED
这已在您的案例中进行了描述。这通常意味着您的测试类不是您的测试运行器期望的形式(例如,不从TestCase继承或缺少@Test注释)。
为此你可以运行
gradlew :MyappAndroid:connectedMyappDebugAndroidTest
(其中MyappAndroid
是MyappAndroid
模块的目录名称),它只会运行MyappAndroid
的测试。
https://stackoverflow.com/a/29717892/2293534
中列出the post对于某些依赖项丢失,例如匕首,会出现此问题。
问题是您将dagger-compiler编译为项目。我不想调查它为什么会在Android 5+上创建仪器测试问题,但无论如何,只是不要将它编译到apk。
//可能测试运行器在内部使用Dagger 2并通过编译自己的版本来破解它,可能他们甚至使用Dagger 1,包名称相同。
您可以使用APT Gradle Plugin https://bitbucket.org/hvisser/android-apt在编译期间运行dagger-compiler,但不要将其编译到应用程序。
以下是带有仪器测试和Dagger 2的#qualitymatters应用程序,一切都可以正常运行,因此您可以查看如何烘焙类似的东西。
对于Gradle用户,请使用https://github.com/tbroyer/gradle-apt-plugin。
对于Maven用户,请使用<optional>true</optional>
。
答案 2 :(得分:0)
我有相同的错误,但testOptions
不同,并且我的项目使用Dagger:
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR' <---- remove this!
}
当我删除execution
行时,我停止收到该错误。不同的错误,但我认为我会分享,以防它可以帮助其他人!