用Robolectric测试什么?

时间:2014-12-08 08:56:03

标签: java android unit-testing junit robolectric

在我看来,我从根本上误解了Robolectric的目的。我已经与它争斗了一个星期,到目前为止,获得新的错误消息被视为取得进展。我能够在一个活动中测试一些基本的东西,比如静态视图,但是当一些更复杂的东西发挥作用时,事情就会崩溃。我不得不扩展Robolectric以支持具有某些参数的第3方库,Appcompat操作栏和许多其他非常耗时的事情,并且在任何地方都没有真正记录,并且事情正在以相当快的速度发展。我开始认为我以错误的方式使用它,它根本不应该做我想做的事。

一般的应用程序逻辑非常简单,因此单元测试并不多,最复杂的是UI和远程API调用。 Robolectric是否应该让Android的单元测试比JUnit更少痛苦,因为它可以在JVM上运行并支持一些Android类?也许像Espresso这样的黑盒行为测试框架更适合我的需求?但是我们使用了连续集成,并且Robolectric很容易设置为在CI服务器上运行测试,我有点想保持这种方式。

你用什么Robolectric?很多博客文章推荐它用于“活动生命周期测试”,但由于我在Android世界中也很新,我真的不明白它的目的,特别是因为我正在测试的应用程序是仅限肖像的。有人可以概述您使用Robolectric的方法,以及如何使用,最好使用代码示例并解释为什么以及如何重要这些测试?

1 个答案:

答案 0 :(得分:3)

我们将它用于:

  • 单元测试:解析器和工具,控制器和演示者的所有组件
  • 集成/验收测试:应用程序的业务逻辑,每个屏幕(分为集成和/或验收测试)

我们不使用它(并且发现很难用于这些):

  • 测试网络层(我们通过以与网络层相同的方式注入测试数据来运行所有测试;解析器单独测试)
  • 用户流经不同的屏幕

如果您正在寻找更多后者,也许Espresso / Robotium更适合您的需求。并且你绝对可以将这些作为CI管道的一部分运行,但是您需要花一些时间进行设置,或者与Appurify之类的东西进行集成。

如果您发现编写测试非常困难,那么应用程序的构建方式可能需要比使用robolectric的方式更多。在这里也可以看到我的答案,它可能会对您有所帮助:Writing Android acceptance tests with robolectric: how could it be done?