Android测试驱动开发

时间:2011-06-07 06:44:58

标签: android unit-testing frameworks tdd mocking

我在制作Android应用程序方面拥有丰富的经验。对于我的新项目,我们决定进行测试驱动开发(TDD)。我一直在使用Robotium进行用户场景测试,它工作正常,看起来也很简单。

对于单元测试,我尝试使用(MockContext Android Class)模拟Context,但我无法这样做。我浏览了这个博客http://sites.google.com/site/androiddevtesting/并通过这个http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-android.html,这表明Android应用中的模拟仍然非常有限且很难,并建议使用PowerMock,jMockit,JeasyTest或Roboelectric(与之结合使用) Mockito和Maven)甚至是RoboGuice。

我想得到你们的任何建议,你认为哪个单元测试框架最适合测试Android应用程序。 (特别是测试Android类,可能会提供模拟上下文和其他模拟功能,以便我可以使我的测试用例尽可能独立)。任何建议或指示都会有所帮助。谢谢

6 个答案:

答案 0 :(得分:30)

对于设备外测试,请查看Robolectric

对于设备上测试,请查看Borachio

底线:做起来仍然非常非常困难。事情正在改善(今天的情况比6个月前要好得多)但Android是我编写过的最具测试敌意的环境。

答案 1 :(得分:17)

要在Android中执行TDD,我个人使用以下所有内容:

另外:使用依赖注入库(例如DaggerRoboguice)将大大简化您的单元/集成测试。要在多个设备上运行测试,请考虑使用Spoon

答案 2 :(得分:4)

  • 我在Activity for TDD(或BDD)的情况下使用ActivityInstrumentationTestCase2,并为所有逻辑编写正常的单元测试。这也有助于我将逻辑与活动分开。
  • 移动应用程序本质上是以UI为中心的。因此它没有 有意义的是模拟UI,即使它使单元测试看起来 就像功能测试一样。
  • 要向意图添加额外内容,您可以为测试设置自定义意图,或者通过覆盖设置为所有测试执行此操作。
  • Mocks在Android上提出了很多问题,所以我使用存根。

下面给出一个例子。单击按钮时,活动将显示Hello World -

public class HelloWorldActivityTest extends
        ActivityInstrumentationTestCase2<HelloWorldActivity> {

    private HelloWorld activity;

    public HelloWorldActivityTest() {
        super(HelloWorldActivityTest.class);
    }

    public void testShouldRenderGreetingOnButtonClick() {
        activity = this.getActivity();
        Button button = (Button) activity.findViewById(R.id.btn_greet);
        TouchUtils.clickView(this, button);
        assertEquals("Hello World!",
                ((TextView) activity.findViewById(android.R.id.greeting_text))
                        .getText());
    }

}

编辑:自从我发布答案后情况发生了变化。 Mockito现在对Android有相当好的支持。为了测试,我们已经从ActivityInstrumentationTestCase2转移到Robolectric,只是为了在开发阶段挖掘JVM的绝对速度。 Android测试框架非常适合集成和功能测试,而不适用于单元测试。

答案 3 :(得分:2)

要为Android应用TDD,Android Testing Codelab对您非常有帮助。代码实验室展示了测试工具的使用以及如何为Android应用TDD。我试过它,这对我非常有帮助。

奖励:检查Clean Architecture

答案 4 :(得分:1)

Android Testing Support Library为测试Android应用提供了广泛的框架。该库提供了一组API,允许您快速构建和运行应用程序的测试代码,包括JUnit 4和功能用户界面(UI)测试。您可以从Android Studio IDE或命令行运行使用这些API创建的测试。

了解更多关于:

谢谢:)

答案 5 :(得分:0)

我们有

  

https://developer.android.com/training/testing/start/index.html

并且能够测试本地(在JVM上运行)和仪器测试(在设备或仿真器上运行)

为此,我们需要添加

Android Testing Support Library

Android SDK包含两个用于功能级应用测试的工具

  

猴子和monkeyrunner