使用Android测试框架

时间:2010-01-12 06:56:33

标签: android testing

Android提供各种测试包,例如

  

AndroidTestCase   ApplicationTestCase   InstrumentationTestCase   ActivityInstrumentationTestCase2 ActivityTestCase

我需要知道如何确定哪个包最适合测试我的应用。此链接提供了一些信息

HTTP://developer.android.com/reference/android/test/package-summary.html

但我需要更清楚......

4 个答案:

答案 0 :(得分:47)

TestCase - 简单的旧JUnit测试用例。它可以扩展为测试与Android框架无关的实用程序类。

  

AndroidTestCase - 它扩展了JUnit的TestCase。它更轻   测试类相比   ActivityTestCase。它不需要   启动一个活动来运行它。它的   getContext()方法允许你获取   如果需要,可以注入上下文。   因为你可以从中得到一个上下文   类,您可以膨胀您的UI对象   测试他们的行为。

ActivityInstrumentationTestCase2 - 这是ActivityInstrumentationTestCase的较新版本。 Android SDK 1.5中不推荐使用ActivityInstrumentationTestCase。与AndroidTestCase相比,它是一个更重的测试类。它为单个活动提供UI和功能测试。您可以通过调用getActivity()方法获取正在测试的注入活动。正在测试的活动在每次测试之前和之后启动并完成。

  

ActivityUnitTestCase - 它给出了   被测活动是孤立的   环境。用它来测试时   活动,活动没有附加   到系统。这会给你更多   控制什么样的环境   你想要你的活动   经过测试。

ApplicationTestCase - 它提供了对Application类的测试。它可用于测试应用程序的生命周期。

  

InstrumentationTestRunner - 运行Android测试的跑步者   例。

我刚发现这个......希望这对其他人有帮助......如果你想要更多细节,比如何时以及如何使用,请参阅android SDK中samples目录中的APIDemos测试应用程序。

答案 1 :(得分:9)

请参阅我自己使用PowerPoint绘制的班级层次结构图。

接受的答案提供了足够的文字信息。我只是用图表说清楚:))

对于InstrumentationTestCase @Zorb问,它是ActivityTestCase的父类。它使您可以调用getInstrumentation方法来获取检测实例,以便您可以操作应用程序,活动等。

Class hierarchy graph drawn by myself

答案 2 :(得分:3)

<强> INTRO

为了澄清您的问题并配置您要求的课程,必须将测试分为两类。 JUnit测试 (理论上是普通Java)和 Instrumentation测试 (这也是JUnit测试包的一部分,但是允许您测试更多与SDK相关的SDK功能)。

传统的JUnit测试隔离了一段代码并运行测试。 Instrumentation测试访问更多包含android组件。但是仪器测试也会从JUNIT PACKAGE中获得,尽管它们甚至在任何应用程序代码运行之前都在系统中实例化,这解释了为什么速度较慢,而且它们需要一个模拟器或电话来运行您正在测试的应用程序。

(跟随你所提到的所有课程中的大胆,但是如果没有大胆的角色,我会写下更多的其他课程。)

****第一部分**(Junit测试)**

A) 扩展TextCase的Junit测试(通常比Instrumentation更快,并且与Mock framweworks结合得很好)

AndroidTestCase :它允许访问您正在测试的Activity及其资源的Context,它是扩展更专业的子类的基类,非常适合访问数据库,文件系统数据。您可以轻松调用getContext()并访问资源,而无需与Instrumentation测试建立与活动的直接联系。

ApplicationTestCase ,用于控制文本应用程序的环境,主要是上下文和生命周期。 AndroidTestCase的其他非常有用的扩展允许您控制加载器,服务和内容提供者,但由于某种原因,仍然没有任何广播接收器可以[间接] [1]使用InstrumentationRegistry.getTargetContext()方法调用它然后实例化BroadCastReceiver 。通常使用与Junit不同的Mock框架通常比InstrumentationTests

更快

-.-。-。-。-。-。-。-.--

****第二部分**(仪器测试)**

扩展TestCase的

B) 检测测试, 被认为是功能测试,更专注于确保它们与用户端一起工作,MVC的View部分。它们通常比其他提到的类别慢

InstrumentationTestCase 是一个基类,可用于将关键事件发送到UI以模拟QWERTY键盘键或DPAD按钮,还可以启动必须测试的Activity,甚至是Intents

ActivityTestCase 通常不单独使用,它只有子类的公共代码,但是如果你不满意继承自这个类的3个类(见下文),就像新的一样未来的组件你可以使用它的时候不会存在一个专用的TestCase类。

ActivityInstrumentationTestCase2 是最常用的Instrumentation类来编写功能测试,从构造函数调用Activity的实例进行测试。基本上你用getActivity()调用活动,你可以实际运行该Activity的任何方法。

不推荐使用 ActivityInstrumentationTestCase,并且虽然在Instrumentation下面的ActivityUnitTestCase更类似于单元测试

答案 3 :(得分:1)

我发现来自droidcon 09的this tutorial非常有用。完成可下载的工作源代码示例。

编辑:正如评论中所指出的那样,链接似乎已经死了。

首先使用ActivityInstrumentationTestCase2,TestCase和AndroidTestCase创建一个Celcius到Fahrenheit温度转换器。