Android 仪器测试未找到测试
Android instrumented test no tests found
我是 Android 检测单元测试的新手。我有一个看起来像这样的简单测试。这是在仪器测试中;在我真正编写一个实际的仪器测试之前,我只想测试一个简单的:
@RunWith(AndroidJUnit4.class)
@SmallTest
public class AddressBookKeepingInstrumentedTest {
public static final String TEST_STRING = "This is a string";
public static final long TEST_LONG = 12345678L;
@Test
public void test_simple() {
assertEquals(2,1+1);
}
}
当我 运行 执行此操作时,出现以下错误:
junit.framework.AssertionFailedError: No tests found in com.example.myfirstapp.AddressBookKeepingInstrumentedTest
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729)
Tests ran to completion.
Gradle 构建在此之前成功通过。
知道为什么会这样吗?
请将以下内容添加到您的 build.gradle 并将您的测试 类 放入 androidTest 文件夹
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
This post 帮助了我,只需将您的测试方法重命名为 "test...",例如 testMethod()
我最近尝试了已接受的答案,但在尝试 运行 时出现了进程崩溃错误。如果你得到这个,你应该使用:
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
来源:
这种情况的典型原因可以看作是Logcat中的异常。
我在 < API 21 上有一个关于检测 multidex 运行 的具体问题,我必须在 androidx.test.runner.AndroidJUnitRunner
的子类上安装 MultiDex 并覆盖:
AndroidJUnitRunner::createTestRequestBuilder
TestRequestBuilder::createClassPathScanner
ClassPathScanner::getClassPathEntries
实现为:
- 从 APK
中解压并提取 dex
个文件
- 运行
dexlib2
获取类型名称。
- 将类型名称转换为可读格式:
Ljava/lang/String;
-> java.lang.string
这是因为 ClassPathScanner
使用 dalvik.system.DexFile
,它在 API 16 上只读取 APK,然后只读取 classes.dex
收到此错误消息的另一个原因是当您有一个 Android 使用 Java 实现的应用程序和使用 Kotlin 实现的测试用例时。如果是这种情况,请确保您的 gradle 文件中包含以下行:
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
确保在您的应用级 build.gradle 文件中添加 testInstrumentationRunner,例如:-
android{
...
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
...
}
如果您使用的是 AndroidX,那么以上内容将与 Android 支持库一起使用“android.support.test.runner.AndroidJUnitRunner”。
我是 Android 检测单元测试的新手。我有一个看起来像这样的简单测试。这是在仪器测试中;在我真正编写一个实际的仪器测试之前,我只想测试一个简单的:
@RunWith(AndroidJUnit4.class)
@SmallTest
public class AddressBookKeepingInstrumentedTest {
public static final String TEST_STRING = "This is a string";
public static final long TEST_LONG = 12345678L;
@Test
public void test_simple() {
assertEquals(2,1+1);
}
}
当我 运行 执行此操作时,出现以下错误:
junit.framework.AssertionFailedError: No tests found in com.example.myfirstapp.AddressBookKeepingInstrumentedTest
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729)
Tests ran to completion.
Gradle 构建在此之前成功通过。 知道为什么会这样吗?
请将以下内容添加到您的 build.gradle 并将您的测试 类 放入 androidTest 文件夹
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
This post 帮助了我,只需将您的测试方法重命名为 "test...",例如 testMethod()
我最近尝试了已接受的答案,但在尝试 运行 时出现了进程崩溃错误。如果你得到这个,你应该使用:
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
来源:
这种情况的典型原因可以看作是Logcat中的异常。
我在 < API 21 上有一个关于检测 multidex 运行 的具体问题,我必须在 androidx.test.runner.AndroidJUnitRunner
的子类上安装 MultiDex 并覆盖:
AndroidJUnitRunner::createTestRequestBuilder
TestRequestBuilder::createClassPathScanner
ClassPathScanner::getClassPathEntries
实现为:- 从 APK 中解压并提取
- 运行
dexlib2
获取类型名称。 - 将类型名称转换为可读格式:
Ljava/lang/String;
->java.lang.string
dex
个文件
这是因为 ClassPathScanner
使用 dalvik.system.DexFile
,它在 API 16 上只读取 APK,然后只读取 classes.dex
收到此错误消息的另一个原因是当您有一个 Android 使用 Java 实现的应用程序和使用 Kotlin 实现的测试用例时。如果是这种情况,请确保您的 gradle 文件中包含以下行:
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
确保在您的应用级 build.gradle 文件中添加 testInstrumentationRunner,例如:-
android{
...
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
...
}
如果您使用的是 AndroidX,那么以上内容将与 Android 支持库一起使用“android.support.test.runner.AndroidJUnitRunner”。