对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中,而androidTesttesting在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