使用Robolectric进行哪些测试?

5
我觉得我根本误解了Robolectric的目的。我已经与它战斗了一个星期,到目前为止,获得新的错误消息被认为是进步。我能够测试一些基本的东西,比如活动中的静态视图,但是当涉及到更复杂的东西时,一切都会崩溃。我不得不扩展Robolectric以支持第三方库和特定参数、Appcompat操作栏和许多其他东西,这非常耗时,并且没有真正记录在任何地方,而且进展缓慢。我开始觉得我使用的方式是错误的,它根本不能做我想要做的事情。
通用的应用逻辑相当简单,因此实际上没有太多可以进行单元测试的内容,最复杂的内容在UI和远程API调用中。Robolectric只是为了使Android单元测试比JUnit更容易,因为它可以在JVM上运行并支持一些Android类吗?也许像Espresso这样的黑盒行为测试框架更适合我的需求?但我们使用连续集成,而Robolectric很容易设置在CI服务器上运行测试,我希望保持这种方式。
你用Robolectric做什么?许多博客文章推荐它进行“活动生命周期测试”,但由于我在Android世界中也很新,我真的不理解它的目的,特别是因为我正在测试的应用程序仅支持纵向屏幕。能否请有人概述一下您使用Robolectric做什么以及如何做到,最好附带代码示例,并解释这些测试的重要性以及为什么和如何进行?

1
我认为你最好去程序员交流。那里主要是讨论概念性问题。 - cheffe
谢谢您的建议,但是已经有一个类似的问题了,它没有非常相关的答案,并且已经关闭。在这里,我更多地询问人们实际使用的具有代码示例的特定用例。 - p4sh4
1个回答

3
我们使用它来进行以下测试:
  • 单元测试:从解析器和工具到控制器和呈现器的所有组件
  • 集成/验收测试:应用程序的业务逻辑,按屏幕划分(属于集成和/或验收测试)
我们不使用它进行以下测试(并且发现这些测试很难使用):
  • 测试网络层(我们通过以与网络层相同的方式注入测试数据来运行所有测试;解析器单独测试)
  • 用户在不同屏幕之间的流程
如果您正在寻找更多后者,也许Espresso/Robotium更适合您的需求。您绝对可以将这些作为CI管道的一部分运行,但您需要投入一些时间进行设置,或者与Appurify等东西集成。
如果您发现编写测试非常困难,那可能更多地与您的应用程序架构有关,而不是与您使用robolectric的方式有关。这里还有我的答案,它可能会帮助您:Writing Android acceptance tests with robolectric: how could it be done?

一个很好的回答,谢谢!你能否对“用户流程”部分再详细解释一下 - 我使用Robolectric来测试在按钮按下或事件发生时是否启动了正确的活动/片段,它属于“应用程序的业务逻辑,每个屏幕”类别还是“用户流程”类别?并且你能否给出你的控制器和展示者单元测试的例子? - p4sh4
很容易测试屏幕上的某些操作会打开另一个屏幕。我建议不要同时测试两个屏幕(例如,测试屏幕A,测试过渡到屏幕B,然后测试屏幕B),这可能是有效的用户流程。最好在UI测试中完成。 - Alex Florescu
哦,是的,我不会同时测试两个屏幕。这些测试似乎仍然不是真正的单元测试,因为它们有时涉及到类中的一些方法,但我肯定会将它们限制在最多一个活动/片段中。 - p4sh4

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