android - 关于使用 gradle 或 android studio 进行 Android 单元测试的问题

标签 android unit-testing android-studio gradle

我正在我的项目中编写一些测试用例,最近几天我遇到了一些关于使用 android studio 和 gradle 进行 android 单元测试的问题,并且在搜索后无法得到很好的答案。

以下是我遇到过的情况,它们真的很困扰我。

情况一:

当我将测试用例放入 androidTest 文件夹并运行 graldew cAT 并且还为测试类使用注释 @AndroidJUnit4 时。我可以运行单元测试并获得正确的结果。但是在我将 @AndroidJUnit4 更改为 @MockitoJUnitRunner 之后(我需要模拟上下文)。 android studio或gradle找不到任何test,只报“empty suit”。

情况二:

当我将测试用例放入test 文件夹并运行graldew test 并使用注解@MockitoJUnitRunner 时。它可以成功找到测试。但我猜它只能在本地运行。如果测试用例依赖于一些本地库,它会给出如下失败消息:java.lang.UnsatisfiedLinkError: no libxx in java.library.path

所以这里有问题:

问题 1:

看来我们可以把测试代码放在src/test或者src/androidTest中。那么这两个文件夹有什么区别呢?

问题 2:

gradlew cATgradle test 有什么区别?这两个命令是否与项目中的文件夹(我提到的test/androidTest文件夹)有关?

问题 3:

在我的情况下,我需要编写一些测试用例,这些用例依赖于 Context 和 native。我应该为此做什么?

最佳答案

因为这实际上是 3 个问题,所以最好创建 3 个单独的 SO 问题。无论如何,这里是答案:

答案 1:

src/test 文件夹用于“常规”JUnit 单元测试。这些是在常规 JVM 中运行的测试。

src/androidTest 文件夹用于任何需要运行 Android 设备或模拟器的测试。这是你的 Espresso测试将会生效。

答案 2:

命令 gradlew cATgradlew connectedAndroidTest 运行任何需要连接设备的测试(cAT 代表连接的 Android 测试) src/androidTest 目录,而命令 gradle test 仅在 src/test 目录中运行单元测试。

答案 3:

如果您的单元测试依赖于 Context,请考虑使用 Robolectric为您的单元测试。这将使您能够访问 Context。关于如何使用 Robolectric 的好例子可以在 Corey Latislaw's "Android Katas" repo 中找到。 .

编辑

情况一: 我不确定这是否是您遇到的问题,但是当我遇到这个“空测试套件”错误时(当我在目录中显然有测试时),那是因为我忘记包含 Android JUnit Test Instrumentation Runner在我模块的 build.gradle 文件中。将其包含在 android 部分的 defaultConfig 部分中,如下所示:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.kiodev.example"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

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

关于android - 关于使用 gradle 或 android studio 进行 Android 单元测试的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35194614/

相关文章:

unit-testing - 类型错误 : Utils is not a constructor

Android studio - 带有库项目的应用程序无法构建

android-studio - Android Studio 错误类型 3 : Error while Launching activity

android-studio - 取消抑制 Android Studio 警告

android - 在 API 21+ 中为 PopupMenu 提供阴影

java - 从 Android 中的 Assets 文件夹读取文件时遇到问题

android - 错误膨胀类 com.airbnb.lottie.LottieAnimationView

android - 按钮不水平居中

angularjs - 使用 multiCapabilites 时的多个 onPrepare 或动态登录参数

unit-testing - Reactive Banana 1.0.0 - MomentIO() Monad 中的单元测试