对Android Gradle中的testCompile和androidTestCompile感到困惑
我是新来的testing世界,甚至更多的Androidtesting世界。 在Robolectric上进行研究的时候,对Android的testing帮助一件事最迷惑我。 有时在Web上,当引用Robolectric而另一些人使用androidTestCompile
时,我发现人们在gradle构build脚本的依赖关系中使用testCompile
关键字。 当然两者都不能有效?
有人可以解释两者之间的区别,哪些应该是使用Robolectric时使用的?
简单地说, testCompile
是unit testing(位于src / test中 )的configuration, androidTestCompile
用于testingapi(位于src / androidTest中 )。 既然你打算编写unit testing,你应该使用testCompile
。
更新:两者之间的主要区别在于test
运行在常规的Java JVM中,而androidTest
testing在Android设备(或仿真器)上运行。
回答你的问题 – 使用testCompile进行robolectric
为什么呢,因为robolectric运行在JVM上,嘲笑所有的android设备行为。
testCompile和androidTestCompile是“按照惯例”的android文件夹,gradle在运行android插件提供的任务时使用。
androidTestDebug从androidTest文件夹中挑选testing,testDebug从testing文件夹中挑选testing,
再次,这些只是通过约定文件夹,你可以给这些configuration源集
注意:咖啡是一个很棒的图书馆,试图摆脱robolectric 🙂
//unit testing
testCompile 'junit:junit:4.12'
上面的代码是JUnit 4在android studio的build.gradle文件中的一个依赖项。 你会发现它有testCompile,因为JUnit运行在JVM上,不需要运行设备或模拟器。 这也意味着JUnittesting不会要求应用程序上下文运行,如果他们需要我们需要“Mock”他们。
// Insturmented Unit Testing
androidTestCompile('com.android.support.test:runner:0.5', { exclude group: 'com.android.support', module: 'support-annotations' })
现在我们在这里看到androidTestCompile,因为这次我们打算使用设备或模拟器进行testing,那就是Instrumentationtesting。 对于beter澄清,我会build议阅读developer.android.com