在 onCreate 之前模拟 activity class 成员

Mock activity class member before onCreate

我正在尝试使用 robolectric 3.3.2 测试 activity。 想模拟和 activity 的成员初始化作为 NPE 中的直接调用结果。

ActivityController<MyActivity> activityController = 
                Robolectric.buildActivity(MyActivity.class);
mTestActivity = activityController.get();

Mockito.when(mTestActivity.getCountry()).thenReturn("xxxx");
activityController.setup();

尝试了上面的代码,但是 setup.() (oncreate) 忽略了模拟 getCountry 方法并调用 activity.

中的定义

有办法实现吗?

即使你使用间谍也不会这样工作(@Spy, Mockito.spy())。

你应该使用存根:

public class MyActivityTest{

    public static class StubMyActivity extends MyActivity {
       Country getCountry() {
           return someSpecialCountry;
       }
    }

    @Before
    public void setUp(){
        ActivityController<StubMyActivity> activityController = 
                Robolectric.buildActivity(StubMyActivity.class);
        mTestActivity = activityController.setup().get();
    }    
}