罗波列克与Android 相比有什么明显的好处吗?我已经阅读了关于这两个框架的文档,但据我所知,Robolectric唯一明显的好处是它运行在JVM上,而不是运行在DalvikVM上,这使得它比DalvikVM框架运行得更快。
还有其他突出的主要好处吗?
发布于 2013-08-16 10:54:12
更新2015年4月-:Gradle构建工具和android.jar 现在正式支持单元测试并防止android.jar抛出存根(没有真正的实现)错误。因此,是的,当存根被适当地模拟时,可以在Java上运行测试。这是一个开始,但仍然比不上罗波列克的力量。还有第三种选择,滚动到这个答案的底部。
现在,关于罗波利克:
Pros:以下是关于它在单元测试中如何被证明是有用的几点:
AsyncTasks、Loopers和Handlers等)时,您可以暂停和快速转发线程包,甚至是主线程。非常适合基于Handler的回调测试。Robolectric.buildActivity()创建模拟活动实例及其控件。片段/视图操作也适用于此类模拟活动实例。Cons:在那里我发现它不太好:
另一种选择是简单地模拟你自己的东西,而不涉及框架。这是“艰难的道路”,但最可定制的方式。普通JUnit与JMockit
@RunWith(JMockit.class)
public class OtherTest {
public void testHandlerCallback(@Mocked final FragmentTransaction transaction,
@Mocked final FragmentManager manager,
@Mocked final Activity activity,
@Mocked final LayoutInflater inflater,
@Mocked final ViewGroup parent) {
final List<Fragment> fragments = new ArrayList<>();
new Expectations() {{
activity.getFragmentManager(); result = manager;
manager.beginTransaction(); result = transaction;
transaction.add(withCapture(fragments), anyString);
transaction.commit(); result = new Delegate<Void>() {
public int commit() {
View v = fragments.get(0).onCreateView(inflater,parent,null);
Deencapsulation.invoke(v,"onMeasure",0,0);
return 0;
}
};
}};
}
}上面是一个粗略的、内联的例子。实际上,您可以创建适当的可重用类(比如FragmentTestHarness),这些类将接受测试的组件(比如Fragment),并将其包装在完全隔离的环境中,为测试做准备。
发布于 2015-02-05 14:55:43
来分享我的表现..。
对于SQL,活动流,对于那些需要上下文的对象。
JUnit4 for api的java模块,以确保数据正确返回。
用于正确检查ui显示的浓缩咖啡。
当我修改api时.我只运行jUnit4。
当我修改api和UI或Sqlite之间的数据绑定时,我将只运行Robolectric。
当我修改UI时,我只运行Espresso。
有时我会把罗波莱咖啡和浓咖啡一起喝,但很少见。
但是我会在出版之前把所有的东西都运行到商店里去。
因为我认为目前还没有真正的好处。但是看看你如何使用它来加快你的产品质量和开发速度。
如果我错了,请纠正我。
发布于 2019-04-12 08:42:48
您只在需要模拟或伪造Android框架的情况下才使用,例如,如果需要上下文。在使用Android 时,您必须运行仪表化的测试,这是非常慢的。
如果您编写让它们频繁运行的测试,例如,因为您遵循tdd方法,这不是一个选项。因此,在本例中,Robolectric派上用场。
因此,Robolectric的主要好处是它比、Espresso、或仪器化测试的速度快得多。
缺点是它伪造了你应该注意的Android环境。要验证现实世界的问题,最好使用经典的方法。
最好还是以一种可以单元测试的方式编写代码,并且不需要上下文或任何其他Android框架依赖项。
Robolectric从2018年开始被集成到安卓测试框架中-在官方罗波列克网页上查看更多,并从2018年I/O查看这段视频
https://stackoverflow.com/questions/18271474
复制相似问题