Gradle,Robolectric和Espresso

8

有人在使用Gradle(Android Studio)构建时成功地将Robolectric和Espresso(一起)工作吗?

我已经通过Peter Friese的文章http://www.peterfriese.de/android-testing-with-robolectric/成功地在Android Studio中使用了Robolectric,但由于instrumentRunner / instrumentTest冲突,我不确定如何集成Espresso。

理想情况下,我希望有以下目录结构:

 |--src
    └── main (application source - exists)
    └── test (Robolectric unit tests go here - exists)
    └── testEspresso [*new*] (espresso tests go here)

我的Gradle+Android知识不是很广泛,我不确定在当前的Gradle+Android状态下是否真的可行(时间、复杂度和脆弱性水平并不太高),如果可行,该如何实现。另外,如果有关系的话,我有两种不同的构建风格。

@RobertHarvey 我想说的可行是指所提出的解决方案所需的时间、复杂度和脆弱性水平不会太糟糕。我已更新我的帖子以反映这一点 :) - loeschg
@loeschg - 你在使用Robolectric时有没有遇到资源无法识别的问题?我也有几个构建版本,但是Robolectric无法识别我的资源。 - Peter Ajtai
@PeterAjtai 我发现 Peter Friese 的这篇文章非常有帮助。看看它是否能帮助你解决问题。我还有几个不同的构建风格。http://www.peterfriese.de/android-testing-with-robolectric/ - loeschg
@loescg 谢谢,是的,非常有帮助。我已经让它工作了,但看起来 Robolectric 不知道构建风格,所以必须为测试加载一个单独的无风格构建配置。 - Peter Ajtai
2个回答

8

1
我不同意Deckard可以很好地协同工作。对我来说,它由于像https://github.com/robolectric/robolectric-gradle-plugin/issues/17这样的问题而无法使用,其他模板(如https://github.com/nenick/android-gradle-template或https://github.com/JCAndKSolutions/android-unit-test)效果更好。 - nenick
@nenick 我的回答已经超过6个月了。自那时以来,很多事情都发生了变化。感谢您提供更好的示例。 - plackemacher
请参考fork的deckard-gradle,但是包含了android-unit-test(robolectric和espresso分开):git@github.com:almozavr/deckard-gradle.git - Oleksii Malovanyi

2
另一种选择是不涉及任何“hack、Gradle插件、IDE插件或IML编辑”的方法,即http://blog.blundellapps.co.uk/android-gradle-app-with-robolectric-junit-tests/。Jake Wharton推荐这种方法。使用此方法,您的Robolectric测试位于单独的Java模块中,与您的主项目分开。Espresso代码与您的主项目一起存在。
使用JW的double-espresso (https://github.com/JakeWharton/double-espresso) 将简化包含Espresso和可能伴随其而来的依赖管理混乱的过程。
@plackemacher提到的解决方案deckard-gradle仍然是一个选项,并且正在维护,但它确实需要一些“手术”才能在IDE中正常工作。
更新:关于Robolectric和Gradle(与Gradle相关)的讨论请参见此处:https://groups.google.com/forum/#!topic/robolectric/xsOpEwtdTi4/discussion 更新:虽然我没有使用过它,但看起来这就是答案。https://github.com/JakeWharton/double-espresso
暂时,我选择创建一个单独的Espresso分支(git),其中设置了正确的testRunner和test目录。不是非常优雅的解决方案……需要一些警惕才能保持一切更新,但现在它正在工作!
如果有人找到更好的解决方案,我一定会更改答案。

它在长期内的表现如何?我担心对于这种用例来说,分支是一个相当糟糕的想法... - fstephany
我已经不再从事这个项目了,所以我无法发表评论 :P。请查看我的更新答案。 - loeschg
@fstephany 我肯定会说不要像我建议的那样创建一个单独的分支。现在有更强大的方法来做这件事。我正在更新我的答案。 - loeschg
哦,太酷了!谢谢你的更新。这里肯定有一个工具问题,但是情况似乎正在变得更顺利了... - fstephany

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接