单元测试隔离了被测试的组件,这就是为什么经常将Mocks框架与Mockito一起使用的原因:因为将单元与其依赖项隔离开来。请注意,关于Android API的说法部分正确,因为还存在Instrumented Unit测试,即Instrumentation也是Junit包的一部分,还有将TestCase扩展为AndroidTestCase类的类。是Junit软件包的一部分,但允许使用A)Context,您可以使用getContext()进行调用,以及B)属于Android API的资源!另外,请考虑AndroidTestCase是基类,还有其他几个非常有用的类可以扩展该类。他们专门测试加载程序,ContentProviders甚至服务,并且他们可以访问Android API。因此,这些类提供了JUnit测试框架以及特定于Android的方法。现在,借助Junit4,有一个ServiceTestRule直接从Object扩展,并且使您可以更轻松地测试Service,尽管您不能直接在此类内启动Intent。
工具测试也包含在Junit软件包中,但是Android API的控制是完全完全的,因为工具测试在运行任何应用程序代码之前已在系统中实例化,并且要测试您需要打开真实的应用程序(模拟器或电话)通过USB连接)。他们可以访问android组件(例如单击按钮)和应用程序生命周期,通常比Junit测试(用于扩展TestCase的测试)(上述检查的测试)要慢,典型的用法是使用ActivityInstrumentationTestCase2,它具有功能测试方法,更面向用户。
编辑:关于Roboelectric和Mockito,它们是当下(2016年7月13日)在最受欢迎的测试框架之间与Espresso结合使用的工具,Roboelectric允许您在几秒钟而不是几分钟内运行多个测试,这对于必须运行连续测试,并进行持续集成。
从Robolectric网站:
Robolectric的另一种方法是使用模拟框架(例如Mockito)或模拟出Android SDK。尽管这是一种有效的方法,但它通常会产生实质上是应用程序代码的反向实现的测试。Roboelectric允许一种更接近黑盒测试的测试样式,从而使测试对重构更为有效,并使测试着重于应用程序的行为而非Android的实现。如果愿意,您仍然可以将模拟框架与Robolectric一起使用。
Mockito也可以与Junit一起使用,实际上是在必须管理最终类,匿名类或原始类型时使用。