运行 Android 仪器测试时出错 "No tests found"
Error "No tests found" when running Android instrumentation tests
我是测试的初学者。我在 android studio 中为登录 activity 创建了一个简单的测试用例。但是我得到一个错误,我无法解决它。这是我的测试代码。非常感谢您的帮助。
package com.example.hassidiczaddic.testinglist;
import android.app.Application;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;
import android.test.ApplicationTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ApplicationTest {
public static final String STRING_TO_BE_TYPED = "Wolfmatrix";
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void LoginActivity() {
onView(withId(R.id.etFName))
.perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());
onView(withId(R.id.etLName))
.perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());
onView(withId(R.id.btnSubmit))
.perform(click());
onView(withId(R.id.tvView))
.check(matches(withText(STRING_TO_BE_TYPED)));
}
}
这是我的错误:
Running tests
$ adb shell am instrument -w -r -e debug false -e class
com.example.hassidiczaddic.testinglist.ApplicationTest
com.example.hassidiczaddic.testinglist.
test/android.test.InstrumentationTestRunner
Client not ready yet..Test running started
junit.framework.AssertionFailedError: No tests found in
com.example.hassidiczaddic.testinglist.ApplicationTest
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at
android.test.InstrumentationTestRunner.onStart
(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run
(Instrumentation.java:1619)
Tests ran to completion.
这是我的 gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.hassidiczaddic.testinglist"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.1'
// App dependencies
compile 'com.android.support:support-annotations:23.0.1'
compile 'com.google.guava:guava:18.0'
androidTestCompile 'com.android.support:support-annotations:23.0.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
}
}
您忘记将 AndroidJUnitRunner 设置为默认测试仪器运行器。
https://developer.android.com/topic/libraries/testing-support-library/index.html
要将 AndroidJUnitRunner 设置为您的 Gradle 项目中的默认测试检测运行器,请在您的 build.gradle 文件中指定此依赖项:
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
更新
和androidx
有些变化,查看https://developer.android.com/training/testing/set-up-project
如果您的目标是 SDK 版本 28,您将使用支持库中重新打包的 androidx
类,因此 AndroidJUnitRunner 是像这样配置...
android {
defaultConfig {
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
}
检查build.gradle
replace testInstrumentationRunner "androidx.test.runner.AndroidJUnit4"
android {
defaultConfig {
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
}
寻找app/src/androidTest/AndroidManifest.xml
将 android:name 更改为 androidx.multidex.MultiDexApplication
<application
android:allowBackup="true"
android:label="Components Tests App"
android:supportsRtl="true"
android:name="android.support.multidex.MultiDexApplication">
至
<application
android:allowBackup="true"
android:label="Components Tests App"
android:supportsRtl="true"
android:name="androidx.multidex.MultiDexApplication">
更多建议:
如果您通过从方法生成测试到达此处...尝试将测试中的测试方法重命名 class.. 类似于将 actualMethod() 重命名为 testActualMethod()
勾选 logcat!
发生这种情况的原因有很多,构建日志并不总是那么有用,即使使用 --stracktrace
--info
或 --debug
标志也是如此。
就我而言,这是由于缺少运行时依赖项。我是在检查 logcat 并看到那里的错误后才弄明白的。
如果您已经检查了其他答案中提到的所有显而易见的事情,但您仍然遇到这个问题,检查 logcat 是否有错误 .
我是测试的初学者。我在 android studio 中为登录 activity 创建了一个简单的测试用例。但是我得到一个错误,我无法解决它。这是我的测试代码。非常感谢您的帮助。
package com.example.hassidiczaddic.testinglist;
import android.app.Application;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;
import android.test.ApplicationTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ApplicationTest {
public static final String STRING_TO_BE_TYPED = "Wolfmatrix";
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void LoginActivity() {
onView(withId(R.id.etFName))
.perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());
onView(withId(R.id.etLName))
.perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());
onView(withId(R.id.btnSubmit))
.perform(click());
onView(withId(R.id.tvView))
.check(matches(withText(STRING_TO_BE_TYPED)));
}
}
这是我的错误:
Running tests
$ adb shell am instrument -w -r -e debug false -e class
com.example.hassidiczaddic.testinglist.ApplicationTest
com.example.hassidiczaddic.testinglist.
test/android.test.InstrumentationTestRunner
Client not ready yet..Test running started
junit.framework.AssertionFailedError: No tests found in
com.example.hassidiczaddic.testinglist.ApplicationTest
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at
android.test.InstrumentationTestRunner.onStart
(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run
(Instrumentation.java:1619)
Tests ran to completion.
这是我的 gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.hassidiczaddic.testinglist"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.1'
// App dependencies
compile 'com.android.support:support-annotations:23.0.1'
compile 'com.google.guava:guava:18.0'
androidTestCompile 'com.android.support:support-annotations:23.0.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
}
}
您忘记将 AndroidJUnitRunner 设置为默认测试仪器运行器。
https://developer.android.com/topic/libraries/testing-support-library/index.html
要将 AndroidJUnitRunner 设置为您的 Gradle 项目中的默认测试检测运行器,请在您的 build.gradle 文件中指定此依赖项:
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
更新
和androidx
有些变化,查看https://developer.android.com/training/testing/set-up-project
如果您的目标是 SDK 版本 28,您将使用支持库中重新打包的 androidx
类,因此 AndroidJUnitRunner 是像这样配置...
android {
defaultConfig {
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
}
检查build.gradle
replace testInstrumentationRunner "androidx.test.runner.AndroidJUnit4"
android {
defaultConfig {
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
}
寻找app/src/androidTest/AndroidManifest.xml
将 android:name 更改为 androidx.multidex.MultiDexApplication
<application
android:allowBackup="true"
android:label="Components Tests App"
android:supportsRtl="true"
android:name="android.support.multidex.MultiDexApplication">
至
<application
android:allowBackup="true"
android:label="Components Tests App"
android:supportsRtl="true"
android:name="androidx.multidex.MultiDexApplication">
更多建议:
如果您通过从方法生成测试到达此处...尝试将测试中的测试方法重命名 class.. 类似于将 actualMethod() 重命名为 testActualMethod()
勾选 logcat!
发生这种情况的原因有很多,构建日志并不总是那么有用,即使使用 --stracktrace
--info
或 --debug
标志也是如此。
就我而言,这是由于缺少运行时依赖项。我是在检查 logcat 并看到那里的错误后才弄明白的。
如果您已经检查了其他答案中提到的所有显而易见的事情,但您仍然遇到这个问题,检查 logcat 是否有错误 .