用Robolectric测试什么?

p4s*_*sh4 5 java junit android unit-testing robolectric

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

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

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

Ale*_*scu 3

我们用它来:

  • 单元测试:从解析器和实用程序到控制器和演示器的所有组件
  • 集成/验收测试:每个屏幕的应用程序的业务逻辑(属于集成和/或验收测试)

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

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

如果您正在寻找更多后者,也许 Espresso/Robotium 更适合您的需求。你绝对可以将它们作为 CI 管道的一部分运行,但您需要投入一些时间进行设置或与 Appurify 等工具集成。

如果您发现编写测试非常困难,那么可能与您的应用程序的架构方式有关,而不是与您使用 robolectric 的方式有关。也可以在这里查看我的答案,它可能会对您有所帮助:用 robolectric 编写 Android 验收测试:如何完成?