在onCreate之前模拟活动类成员

时间:2017-04-21 17:12:53

标签: android unit-testing mockito robolectric

我正在尝试使用robolectric 3.3.2测试活动。 想要模拟和活动的成员初始化,因为直接调用会导致NPE。

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

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

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

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

即使您使用间谍(@SpyMockito.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();
    }    
}