模拟在Android中运行最佳的库/框架?

pix*_*xel 35 android unit-testing mocking android-testing

我正在使用第三方库(Twitter4j)开发Android应用程序.我希望能够在JUnit和功能测试中模拟那些对象(也是我创建的对象).

您是否有使用某些模拟库的好经验,您可以推荐它们吗?

Mat*_*ias 37

(更新:Mockito从版本1.9.5开始添加了Android支持,EasyMock在版本3.2中添加了Android支持,通过分解那些在运行时生成代码并使其可插入的位,例如使用dexmaker而不是cglib.)

除了DixonD提到的android-mock(这是一个相当年轻,未经证实的库),目前还没有解决方案.你可以立即忘记任何基于CGLib(Mockito,普通EasyMock)的东西,因为CGLib依赖于字节代码生成而不能在Dalvik上运行(它也依赖于Java Beans包,它也不是Android的一部分).

对于它的价值,您可以使用Android附带的极少数模拟类(如MockContext),但它们不会验证行为,它们只是存根.它们的默认行为是在每个方法中抛出运行时错误,因此您必须对它们进行子类化并覆盖要模拟的方法.

但是,您仍然可以在非检测测试中使用模拟库,即在JVM上执行的标准单元测试中.您可以使用PowerMock来模拟框架方法,它支持模拟静态方法和构造函数,使得模拟功能像Ruby一样强大(使用起来更加痛苦).

我们使用JUnit 4 + PowerMock + Mockito并在基类中模拟像Context和TextUtils这样的类,我们继承每个正常的JUnit测试.对于检测测试,我们创建自定义模拟类并决定使用工厂在运行时实例化(无论是否模拟).


Pau*_*her 7

我最近发布了Borachio,一个适用于Android的原生Scala模拟框架.

因为Borachio是用Scala编写的,所以你需要在Scala中编写测试.但它可以用来测试用Java编写的代码.

在我的博客上有关于如何在Android上使用Borachio的说明:

http://www.paulbutcher.com/2011/03/mock-objects-on-android-with-borachio-part-1/ http://www.paulbutcher.com/2011/03/mock-objects-on- android-with-borachio-part-2 / http://www.paulbutcher.com/2011/03/mock-objects-on-android-with-borachio-part-3/

更新:

Borachio现在是ScalaMock.