Android上的单元测试和功能测试

时间:2010-11-10 02:44:52

标签: android unit-testing functional-testing

我创建了一个在多个活动中发送意图的应用。在做了一些研究之后,我发现ActivityUnitTestCase类是为单元测试而设计的,而ActivityInstrumentationTestCase2是为功能测试而设计的。我理解使用setUp()tearDown()testPreConditions()等方法。但是,我在尝试找出在前面提到的类中创建的 user-defined-tests 时遇到了一些困难。我知道有些方法在某些类中无法调用。

更具体地说,如果我在活动A 并点击按钮,则会调用startActivityForResult(),其中活动B 。然后我将意图发送回活动A ,这是在onActivityResult()方法中处理的。如何测试onActivityResult()中的实际结果是否等于预期结果?

我一直在广泛寻找能够帮助消除这种混乱的任何例子。如果有人能提供任何帮助我会非常感激。

1 个答案:

答案 0 :(得分:1)

对于这种类型的东西,您可能通过实际测试视图控制器对视图所做的更改来间接测试发送到onActivityResult的结果。我们使用ActivityInstrumentationTestCase2和Robotium库(我强烈推荐)的实例。

public class AdvancedSearchActivityTest extends ActivityInstrumentationTestCase2<AdvancedSearchActivity> {

    private Solo solo;

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        solo = new Solo(getInstrumentation(), getActivity());
    }

    public void testWhenActivityLoads_shouldShowCorrectWidgets() throws Exception {
        assertTrue(solo.searchText("Location:"));
        assertTrue(solo.searchText("Map Radius:"));
        assertTrue(solo.searchButton("Search"));
    }
}

ActivityInstrumentationTestCase2仅指定要启动的基本活动,因此没有理由不能通过测试启动其他活动(模拟按钮单击等),然后从具有结果的那些回来。我们已经多次这样做了。我会避免试图让集成类型测试直接尝试从onActivityResult获得结果。