1

我有一个使用对象的活动。为了进行测试,我想模拟这个对象,但我找不到如何让 Activity 在 onCreate() 函数中使用模拟对象。

我正在使用 AndroidMock 在测试中创建模拟对象和 Robotium。例如:

应用程序(标准 Android 项目):

class MainActivity extends ... {
    MyObject obj;
    MainActivity() {
        obj = new MyObject();
    }
    void onCreate(Bundle b) {
        obj.doSomething();
        ...
    }
}

测试(标准 Android 测试项目):

class MainActivityTest extends ... {
    @UsesMocks(MyObject.class)
    public void testMyObject() {
        // create the mock object
        MyObject o = AndroidMock.createMock(MyObject.class);
        AndroidMock.expect(o.doSomething()).andReturn(false);
        AndroidMock.replay(o);

        // Here some code which makes the activity use the mock object
        // and calls the onCreate() function on the activity.

        // Do some tests on the activity.
        Solo solo = new Solo(getInstrumentation(), getActivity());
        Assert.assertTrue(solo.searchText("It works!")); 
        AndroidMock.verify(o);
    }
}
4

1 回答 1

2

我知道这两种方法。

  1. 使用 DI Conrainer。 机械果汁

    @inject
    MyObject obj;
    
  2. 继承被测试的类

活动

    class DummyMainActivity extends MainActivity {
        Bundle b;
        @Override
        void onCreate(Bundle b) {
            this.b = b;
        }
        void onCreateSuper() {
            super(b);
        }
    }

测试

    class MainActivityTest extends ActivityUnitTestCase<DummyMainActivity> {
        @UsesMocks(MyObject.class)
        public void testMyObject() {
             // create the mock object
             MyObject o = AndroidMock.createMock(MyObject.class);

            DummyMainActivity activity = startActivity(new Intent(), null, null);
            activity.obj = o;

            activity.onCreateSuper();
            AndroidMock.verify(o);
        }
    }
于 2012-12-16T06:50:05.443 回答