【问题标题】:UnitTesting and Functional Testing on AndroidAndroid 上的单元测试和功能测试
【发布时间】:2010-11-10 02:44:52
【问题描述】:

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

更具体地说,如果我在 activity A 中并单击一个按钮,那么它会调用 startActivityForResult(),它会启动 activity B。然后,我将意图发送回 activity A,该意图在 onActivityResult() 方法中处理。我如何测试onActivityResult() 中的实际结果是否等于预期结果?

我一直在广泛寻找任何有助于消除这种困惑的示例。如果有人可以提供任何帮助,我将不胜感激。

【问题讨论】:

    标签: android unit-testing functional-testing


    【解决方案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 获取结果。

    【讨论】:

    • 这听起来是个好主意。我一定会试试这个。是的,我实际上正在使用 Robotium。那么为什么直接获取 onActivityResult 的结果的集成类型测试是一种不好的做法呢?
    • 在我看来,使用 Robotium,我们正在处理用户体验级别测试,而查看 onActivityResult 的结果的级别要低得多。另外,我只是认为这真的很难,并且需要相当侵入性的测试。如果您可以用另一种方式进行测试,那么做很多工作却收效甚微。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2020-09-25
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多