截至Android Studio 1.1rc有Unit testing support,我想知道Android仪器测试和单元测试之间的区别是什么。
据我所知
- 单元测试 * 对于测试不调用Android API的代码非常有用,而 *Android工具测试 * 则是测试Android API特定元素或GUI组件的集成测试。
但是,如果您在单元测试中使用 Robolectric 或 Mockito 这样的框架,那么如果我没有记错的话,您可以测试Android代码(不需要设备)。
这是对的,还是有更大的区别?如果是这样,每一个有什么用?
7条答案
按热度按时间uyto3xhc1#
在我看来,工具测试是集成测试,能够控制应用程序的生命周期和事件(onStart、onCreate等)。
单元测试,据我所知,是测试一个单元(如类)的数据和行为。
例如,假设你有一个游戏:这个游戏运行在一个活动(主活动)上,你有一个基于Robot类的角色,它有2个方法(射击和移动)。你可以用仪器测试来测试主活动,看看它在你离开应用程序时是否正确保存,在你恢复它时是否正确恢复等等。你可以用单元测试来测试Robot,测试它的属性和行为。
**免责声明:**我不是一个java爱好者,但是我对你的问题很感兴趣,我在网上做了一个小的搜索就回答了这个问题。你可能需要更深入地挖掘这个问题才能找到更详细的答案。
mmvthczy2#
单元测试隔离被测组件,这就是为什么经常作为Mockito与Mocks框架一起使用的原因:因为将单元与它们的依赖项隔离。请注意,您所说的Android API部分正确,因为还有Instrumented Unit tests,即Instrumentation也是Junit包的一部分,以及扩展TestCase的类,因为类AndroidTestCase是Junit包的一部分,但允许使用A)Context,您可以使用getContext()调用,以及B)Resources,它们是Android API的一部分!还请考虑AndroidTestCase是一个基类,还有其他几个非常有用的类可以扩展该类。它们专门测试Loaders、ContentProviders甚至服务,而且它们可以访问Android API。因此,这些类提供了JUnit测试框架以及Android特定的方法。现在,Junit 4有了ServiceTestRule,它直接从Object扩展,使您可以更轻松地测试服务,尽管您无法直接在该类中启动Intent。
工具测试它们也包含在Junit包中,但Android API的控制非常全面,因为工具测试是在运行任何应用程序代码之前在系统中示例化的,要进行测试,您需要打开真正的应用程序(模拟器或与USB连接的电话)。他们访问Android组件(例如,单击按钮)和应用程序生命周期,它们通常比扩展TestCase的Junit测试(上面讨论的)慢。典型的使用是ActivityInstrumentationTestCase 2,它具有功能测试方法,更面向用户。
编辑:关于Roboelectric和Mockito,它们与Espresso是目前最流行的测试框架(2016年7月13日),Roboelectric允许您在几秒内而不是几分钟内运行多个测试,这在必须运行连续测试并进行持续集成的团队中非常方便。
从Robolectric的网站:
Robolectric的另一种方法是使用Mockito等模拟框架或模拟Android SDK。虽然这是一种有效的方法,但它通常会产生本质上是应用程序代码的反向实现的测试。Roboelectric允许更接近黑盒测试的测试风格。使测试更有效地进行重构,并允许测试关注应用程序的行为而不是Android的实现。如果愿意,您仍然可以使用Robolectric沿着模拟框架。
Mockito也可以与Junit一起使用,除了必须管理final类、匿名类或原语类型时,才真正使用它。
hec6srdp3#
单元测试
仅在本地计算机上运行的单元测试。这些测试被编译为在JVM上本地运行,以最大限度地缩短执行时间。使用此方法可以运行与Android框架没有依赖关系或具有模拟对象可以满足的依赖关系的单元测试。
所以基本上,你可以运行普通的java代码来测试内容提供者,数据库连接,方法的输入和输出。这在Android上不运行。要运行它,你不需要设备。
** Jmeter 测试**
在Android设备或模拟器上运行的单元测试。这些测试可以访问检测信息,如受测应用的上下文。使用此方法可以运行具有模拟对象无法轻松满足的Android依赖项的单元测试。
所以它模拟用户如何使用实际的应用程序,因此你需要一个设备(物理的或模拟器)来运行它。它可以访问视图,活动,上下文等。
参考:http://developer.android.com/tools/testing/testing_android.html
nbewdwxp4#
安卓系统测试
Test types(https://stackoverflow.com/a/65259827/4770877)
Android世界
中的测试类型图
本地单元测试:JUnit、模拟、PowerMock
Jmeter 测试(功能测试的一种):浓缩咖啡、Robolectric、Robotium
Run test via Command line(https://stackoverflow.com/a/63768376/4770877)
Test double types(https://stackoverflow.com/a/61209739/4770877)
o2gm4chl5#
单元测试:
通常单元测试被称为“本地测试”或“本地单元测试”。这样做的主要原因似乎是您希望能够在没有连接设备或模拟器的情况下运行测试。
单元测试无法在不模拟Activity等对象的情况下测试应用的UI。
** Jmeter 测试:**
检测测试在设备或模拟器上运行。在后台,将安装你的应用,然后还将安装测试应用,该测试应用将控制你的应用、启动它并根据需要运行UI测试。
检测测试也可用于测试非UI逻辑。当需要测试依赖于上下文的代码时,检测测试尤其有用。
Ref link for example
bd1hkmkf6#
它仅在本地计算机上运行。
它在Android设备或模拟器上运行。如果您检查测试用例,它在模拟器或Android设备上运行
vu8f3i0k7#
单元测试侧重于代码的一小部分(即类级方法),并提供代码按预期工作的基本验证。Espresso测试提供UI按预期工作的基本验证。