2012-10-03 2 views
1

개체를 사용하는 활동이 있습니다. 테스트를 위해이 객체를 모의하고 싶지만 onCreate() 함수에서 Activity가 mock 객체를 사용하는 방법을 찾을 수 없습니다.활동의 mock 객체를 onCreate()로 가져 오는 방법은 무엇입니까?

AndroidMock을 사용하여 모의 객체와 Robotium을 테스트에 사용하고 있습니다.

응용 프로그램 (표준 안드로이드 프로젝트) :

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

시험 (표준 안드로이드 프로젝트 테스트) : 예를 들어

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); 
    } 
} 

답변

2

나는이 방법을 알고있다.

  1. DI Conrainer를 사용합니다. 테스트 클래스를 상속

  2. Robojuice

    @inject 
    MyObject obj; 
    

활동

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); 
     } 
    } 
관련 문제