单元测试隔离了被测试的组件,这就是为什么经常将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一起使用,实际上是在必须管理最终类,匿名类或原始类型时使用。