Android检测测试未发现任何测试

时间:2016-08-31 05:47:04

标签: android unit-testing android-instrumentation

我是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构建在此之前成功通过。 任何想法为什么会发生这种情况?

5 个答案:

答案 0 :(得分:13)

请将以下内容添加到build.gradle中,并将测试类放入androidTest文件夹

android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

答案 1 :(得分:7)

我最近尝试了接受的答案,但尝试运行时它给了我一个进程崩溃错误。如果得到这个,应该使用:

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

来源:Instrumentation run failed due to 'Process crashed.'

答案 2 :(得分:1)

This post帮助了我,只需将测试方法重命名为" test ...",如testMethod()

答案 3 :(得分:1)

典型的原因可以看作是Logcat中的异常。

我遇到了一个关于在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在API 16上仅读取APK,然后仅读取classes.dex

答案 4 :(得分:0)

出现此错误消息的另一个原因是,当您拥有使用Java实现的Android应用程序以及使用Kotlin实现的测试用例时。如果是这种情况,请确保gradle文件中包含以下几行:

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'