android - Gradle 测试命令未运行任何测试

标签 android android-studio gradle

我有一个可以在 Android Studio 上运行的简单测试实现。 此类位于我项目的/src/androidTest 目录中。 ApplicationTest.java:

public class ApplicationTest extends ApplicationTestCase<Application> {
    public ApplicationTest() {
        super(Application.class);
    }

    @Override
    protected void setUp() throws Exception {
        createApplication();
    }

    @SmallTest
    public void testSample() {
        assertEquals("Pass: ", 50, 50);
        assertEquals("Fail: ", 50, 49);
    }
}

但是当我尝试使用以下命令通过 gradle 运行时,没有任何运行。我正在尝试的 Gradle 命令:

./gradlew test

输出:

c-08e-abaek-0:HelloTest abaek$ ./gradlew test
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preCompileDebugUnitTestJava
:app:preDebugUnitTestBuild UP-TO-DATE
:app:prepareDebugUnitTestDependencies
:app:processDebugUnitTestJavaRes UP-TO-DATE
:app:compileDebugUnitTestJava UP-TO-DATE
:app:compileDebugUnitTestSources UP-TO-DATE
:app:mockableAndroidJar UP-TO-DATE
:app:assembleDebugUnitTest UP-TO-DATE
:app:testDebug UP-TO-DATE
:app:preReleaseBuild UP-TO-DATE
:app:checkReleaseManifest
:app:prepareReleaseDependencies
:app:compileReleaseAidl UP-TO-DATE
:app:compileReleaseRenderscript UP-TO-DATE
:app:generateReleaseBuildConfig UP-TO-DATE
:app:generateReleaseAssets UP-TO-DATE
:app:mergeReleaseAssets UP-TO-DATE
:app:generateReleaseResValues UP-TO-DATE
:app:generateReleaseResources UP-TO-DATE
:app:mergeReleaseResources UP-TO-DATE
:app:processReleaseManifest UP-TO-DATE
:app:processReleaseResources UP-TO-DATE
:app:generateReleaseSources UP-TO-DATE
:app:processReleaseJavaRes UP-TO-DATE
:app:compileReleaseJava UP-TO-DATE
:app:preCompileReleaseUnitTestJava
:app:preReleaseUnitTestBuild UP-TO-DATE
:app:prepareReleaseUnitTestDependencies
:app:processReleaseUnitTestJavaRes UP-TO-DATE
:app:compileReleaseUnitTestJava UP-TO-DATE
:app:compileReleaseUnitTestSources UP-TO-DATE
:app:assembleReleaseUnitTest UP-TO-DATE
:app:testRelease UP-TO-DATE
:app:test UP-TO-DATE

BUILD SUCCESSFUL

Total time: 3.303 secs

This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html

我做错了什么?

最佳答案

我不熟悉每一种 Android 测试,但我看到您正在尝试运行基本的单元测试。

命令:

./gradlew 测试

将执行位于:src/test/java/ 目录中的纯 java 单元测试。

Android 上的纯 Java 测试单元测试

如果你想在没有android依赖的情况下执行纯java单元测试,你可以在src/test/java目录中找到它们并定义它们如下:

@RunWith(JUnit4.class)
public class SampleTest {

  @Test
  public void testKiraiShouldSetAnInputAndNotBeNull() {
    // given
    int givenValue = 50;

    // when
    int expectedValue = 50; // you can generate this value by your app

    // then
    assertThat(givenValue).isEqualTo(expectedValue);
  }
}

此外,您的build.gradle 文件中应该有以下依赖项:

dependencies {
  testCompile 'junit:junit:4.12'
  testCompile('com.google.truth:truth:0.25') {
    exclude group: 'junit' // Android has JUnit built in
  }
}

我正在使用 Google Truth用于断言。这是一个非常方便的图书馆。 之后,你可以执行命令:

./gradlew 测试

你的测试应该被执行。此外,您也可以通过 Android Studio 执行它们。

如果您想查看带有纯 Java 测试的完整工作示例,您可以在此处查看我的项目之一:https://github.com/pwittchen/kirai .

Android 依赖项的单元测试

如果您想使用 Android 依赖项创建单元测试(例如,使用 Android SDK 中的一些类),您应该在以下目录中找到它们:

src/androidTest/

示例性测试如下所示:

@RunWith(AndroidJUnit4.class)
public final class SampleTest {
  @Test
  public void testKiraiShouldSetAnInputAndNotBeNull() {
  // given
  int givenValue = 50;

  // when
  int expectedValue = 50; // you can generate this value by your app

  // then
  assertThat(givenValue).isEqualTo(expectedValue);
  }
}

基本上,与前一个示例的唯一区别是定义测试运行程序的 @RunWith 注释的值以及您可以在此处使用 Android SDK 中的类这一事实。

您应该在 build.gradle 文件中定义以下依赖项:

dependencies {
  androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
  androidTestCompile('com.google.truth:truth:0.26') {
    exclude group: 'junit' // Android has JUnit built in.
  }  
}

此外,你还应该在build.gradle文件中定义testInstrumentationRunner:

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

之后,您需要运行 Android 设备模拟器或将真实的 Android 设备连接到您的计算机并在其上启用调试。

然后,您可以执行以下命令:

./gradlew connectedCheck

它将在设备或模拟器上执行仪器单元测试。您也可以从 Android Studio 执行这些测试。

如果您想查看带有 Android 依赖项的单元测试的完整工作示例,您可以查看我的另一个项目,我在其中使用了这种方法:https://github.com/pwittchen/prefser .

Android 上的自动化测试一开始可能会令人困惑,我知道您的痛苦。我希望我的帖子能有所帮助。 :)

关于android - Gradle 测试命令未运行任何测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31975388/

相关文章:

android - 应用程序终止时,特定 View 不会在通知点击时打开

dependencies - 将本地库项目作为依赖添加到 Android Studio 中的多个项目

java - AndroidManifest 不匹配

git - 在 Jenkins 的Gradle中获得Git Working分支

android - gradle依赖中的compile,testCompile和provided有什么区别

android - 将 Crashlytics 与 Firebase 关联起来

java - ByteBuffer allocateDirect 花费了很长时间

android - 在 gridview 末尾添加一个 textview 用于加载更多图片

Android gradle 构建错误 :(10, 0) 找不到 Gradle DSL 方法: 'compile()'

maven - 具有 “outgoing”依赖关系的Maven中央jar