Java 用机器人分子测试什么?

Java 用机器人分子测试什么?,java,android,unit-testing,junit,robolectric,Java,Android,Unit Testing,Junit,Robolectric,在我看来,我基本上误解了机器人分子的目的。我已经和它斗争了一个星期,到目前为止,收到一条新的错误消息被认为是在进步。我能够测试一些基本的东西,比如活动中的静态视图,但是当一些更复杂的东西开始发挥作用时,事情就会崩溃。我必须扩展Robolectric以支持具有特定参数的第三方库、Appcompat操作栏和许多其他东西,这些东西非常耗时,而且在任何地方都没有真正的文档记录,而且进展速度非常缓慢。我开始觉得我用错了它,它根本不应该做我想让它做的事情 一般的应用程序逻辑非常简单,因此没有太多的单元测试,

在我看来,我基本上误解了机器人分子的目的。我已经和它斗争了一个星期,到目前为止,收到一条新的错误消息被认为是在进步。我能够测试一些基本的东西,比如活动中的静态视图,但是当一些更复杂的东西开始发挥作用时,事情就会崩溃。我必须扩展Robolectric以支持具有特定参数的第三方库、Appcompat操作栏和许多其他东西,这些东西非常耗时,而且在任何地方都没有真正的文档记录,而且进展速度非常缓慢。我开始觉得我用错了它,它根本不应该做我想让它做的事情

一般的应用程序逻辑非常简单,因此没有太多的单元测试,最复杂的是UI和远程API调用。Robolectric是否只是为了让Android的单元测试比JUnit的测试更轻松,因为它可以在JVM上运行并支持几个Android类?也许像Espresso这样的黑盒行为测试框架更适合我的需要?但是我们使用continuos集成,Robolectric很好,很容易设置,可以在CI服务器上运行测试,我希望保持这种方式

你用Robolectric做什么?很多博客文章都推荐它用于“活动生命周期测试”,但由于我在Android世界还是个新手,我并不真正理解它的用途,特别是因为我正在测试的应用程序只是一个肖像。有人能概述一下您使用Robolectric的目的和方法吗?最好是用代码示例,并解释这些测试为什么和如何重要

我们将其用于:

  • 单元测试:从解析器和UTIL到控制器和演示器的所有组件
  • 集成/验收测试:每个屏幕上应用程序的业务逻辑(分为集成和/或验收测试)
我们不将其用于(并且发现很难用于这些):

  • 测试网络层(我们以与网络层相同的方式注入测试数据来运行所有测试;解析器单独测试)
  • 用户通过不同的屏幕流动
如果您正在寻找更多的后者,也许浓缩咖啡/机器人咖啡更适合您的需要。您完全可以将这些作为CI管道的一部分来运行,但是您需要在安装上投入一些时间,或者与Appurify之类的东西集成


如果您发现编写测试非常困难,那么与使用robolectric相比,您的应用程序的架构可能需要做更多的工作。在这里也可以看到我的答案,它可能会对您有所帮助:

我认为您最好还是加入。这是关于概念性的问题。谢谢你的建议,但是这里有一个问题,它没有非常相关的答案,并且已经结束了。在这里,我想了解更多人们在代码示例中实际使用的特定用例。这是一个很好的答案,谢谢!你能详细说明一下“用户流”部分吗?我使用Robolectric测试按钮按下或事件是否启动了正确的活动/片段,它是否属于“应用程序的业务逻辑,每个屏幕”类别,还是“用户流”类别?您能给出控制器和演示器单元测试的示例吗?很容易测试,对于屏幕上的某些操作,另一个屏幕将被打开。我建议不要同时测试两个屏幕(例如,测试屏幕A,测试转换到屏幕B,然后测试屏幕B),这很可能是一个有效的用户流。这最好在UI测试中完成。哦,是的,我不会同时测试两个屏幕。测试似乎仍然不是“真正的”单元测试,因为它们有时涉及类中的一些方法,但我肯定要将它们限制在最多一个活动/片段。