1

オブジェクトを使用するアクティビティがあります。テストのために、このオブジェクトをモックしたいのですが、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

私は2つの方法を知っています。

  1. DIコンライナーを使用。 ロボジュース

    @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 に答える