我正在我的项目中编写一些测试用例,我对android studio& amp;我最近几天遇到了gradle,搜索后无法得到好的答案。
以下是我遇到的情况,他们真的很困扰我。
情况1:
当我将测试用例放在 androidTest 文件夹中并运行graldew cAT
时,还会为测试类使用注释@AndroidJUnit4
。我可以运行单元测试并获得正确的结果。但在我刚刚将@AndroidJUnit4
更改为@MockitoJUnitRunner
之后(我需要模拟上下文)。 android studio或gradle找不到任何测试,只能告诉"空套"。
情况2:
当我将测试用例放在测试文件夹中并运行graldew test
并使用注释@MockitoJUnitRunner
时。它可以成功找到测试。但我猜它只在本地运行。如果测试用例依赖于某些本机lib,它将提供失败消息,如:java.lang.UnsatisfiedLinkError: no libxx in java.library.path
所以这里有问题:
问题1:
似乎我们可以将测试代码放在src / test或src / androidTest中。那么这两个文件夹之间有什么区别呢?
问题2:
gradlew cAT
和gradle test
之间有什么区别?这两个命令是否与项目中的文件夹( test / androidTest 文件夹)相关?
问题3:
在我的情况下,我需要编写一些依赖于Context和native的测试用例。我该怎么做?
答案 0 :(得分:6)
由于这实际上是3个问题,因此最好创建3个单独的SO问题。无论如何,这里有答案:
回答1:
src/test
文件夹用于“常规”JUnit单元测试。这些是在常规JVM中运行的测试。
src/androidTest
文件夹适用于需要运行Android设备或模拟器的任何测试。这是您的Espresso测试所在的位置。
回答2:
命令gradlew cAT
或gradlew connectedAndroidTest
运行任何需要连接设备(cAT
代表连接Android测试)的测试,这些测试位于src/androidTest
目录中,而命令gradle test
只在src/test
目录中运行单元测试。
回答3:
如果您的单元测试取决于上下文,请考虑使用Robolectric进行单元测试。这将使您可以访问上下文。有关如何使用Robolectric的好例子可以在Corey Latislaw's "Android Katas" repo中找到。
修改强>
情况1:
我不确定这是否是您遇到的问题,但是当我遇到这个“空测试套件”错误时(当我在目录中明显有测试时),这是因为我忘了包含Android JUnit Test Instrumentation Runner在我的模块的build.gradle文件中。将其添加到defaultConfig
部分的android
部分,如下所示:
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"
}
}