Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于使用gradle或Android studio进行Android单元测试的问题_Android_Unit Testing_Android Studio_Gradle - Fatal编程技术网

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

关于使用gradle或Android studio进行Android单元测试的问题,android,unit-testing,android-studio,gradle,Android,Unit Testing,Android Studio,Gradle,我正在我的项目中编写一些测试用例,最近几天我遇到了一大堆关于android studio&gradle的android单元测试的问题,在搜索后无法得到好的答案 以下是我遇到的情况,它们真的让我很困扰 情景1: 当我将测试用例放在androidTest文件夹中,运行graldew cAT并对测试类使用注释@AndroidJUnit4时。我可以运行单元测试并得到正确的结果。但是在我刚刚将@AndroidJUnit4更改为@MockitoJUnitRunner之后(我需要模拟上下文)。android

我正在我的项目中编写一些测试用例,最近几天我遇到了一大堆关于android studio&gradle的android单元测试的问题,在搜索后无法得到好的答案

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

情景1:

当我将测试用例放在androidTest文件夹中,运行
graldew cAT
并对测试类使用注释
@AndroidJUnit4
时。我可以运行单元测试并得到正确的结果。但是在我刚刚将
@AndroidJUnit4
更改为
@MockitoJUnitRunner
之后(我需要模拟上下文)。android studio或gradle找不到任何测试,只能告诉“空西装”

情景2:

当我将测试用例放在test文件夹中,运行
graldew test
并使用注释
@MockitoJUnitRunner
时。它可以成功地找到测试。但我想它只在本地运行。如果测试用例依赖于某个本机库,它将给出失败消息,如:
java.lang.unsatifiedlinkerror:no libxx in java.library.path

以下是一些问题:

问题1:

似乎我们可以将测试代码放在src/test或src/androidTest中。那么这两个文件夹之间有什么区别呢

问题2:

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

问题3:


在我的情况下,我需要编写一些测试用例,它们依赖于上下文和本机。我应该怎么做?

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

答案1:

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

src/androidTest
文件夹用于任何需要运行Android设备或模拟器的测试。这就是你的测试的地方

答案2:

命令
gradlew cAT
gradlew connectedAndroidTest
运行任何需要连接设备的测试(
cAT
代表已连接的安卓测试),这些设备位于
src/androidTest
目录中,而命令
gradle Test
只运行单元测试,位于
src/Test
目录中

答案3:

如果您的单元测试依赖于上下文,请考虑使用单元测试。这将使您能够访问上下文。有关如何使用Robolectric的示例,请参见

编辑

情景1: 我不确定这是否是您正在经历的,但当我遇到这个“空测试套件”错误时(当我在目录中明显有测试时),这是因为我忘了在模块的build.gradle文件中包含Android JUnit测试工具运行程序。将其包含在您的
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"
    }
}

非常好的回答和感谢。关于答案2,这是否意味着
gradlewcat
将只运行
androidTest
文件夹中的测试?不客气!如果您接受这一正确答案,我们将不胜感激。是,
gradlew cAT
将只运行
androidTest
文件夹中的测试。确定。你能帮我解释一下我在问题中提到的情况吗?我不知道如何检测测试用例的机制。谢谢!我会编辑我的答案,包括我所知道的。我会尝试你的新版本的解决方案。谢谢调查!