Java 模拟getActionBar()返回null
我正在测试一个活动,我想模拟Java 模拟getActionBar()返回null,java,android,mockito,robolectric,Java,Android,Mockito,Robolectric,我正在测试一个活动,我想模拟getActionBar()。我已经试着用通常的方法做了 ActionBar mActionBar; @Before public void setup() { initMocks(this); mActionBar = Mockito.mock(ActionBar.class); } @Test public void someTest(){ when(activity.getActionBar()).thenReturn(mAc
getActionBar()
。我已经试着用通常的方法做了
ActionBar mActionBar;
@Before
public void setup() {
initMocks(this);
mActionBar = Mockito.mock(ActionBar.class);
}
@Test
public void someTest(){
when(activity.getActionBar()).thenReturn(mActionBar);
}
但这似乎没有什么作用,因为我仍然得到了NPE,当我在
getActionBar()
之后的活动中尝试使用操作栏时,您可能正在测试代码中模拟的ActionBar
上调用其他方法,例如:
Tab tab = actionBar.getSelectedTab()
when(actionBar.getSelectedTab()).thenReturn(mock(Tab.class));
这将返回null
。使用选项卡
将导致NPE
这意味着您需要进行更多的模拟,例如:
Tab tab = actionBar.getSelectedTab()
when(actionBar.getSelectedTab()).thenReturn(mock(Tab.class));
现在,上面的示例将返回模拟的
选项卡
我假设您正在设置活动
,正如Robolectric教程中所述。没有简单的方法可以在活动代码本身内部模拟真实的活动方法
我建议您创建TestMyActivity
,它扩展了您的活动,并且只存在于测试源中。然后您可以覆盖getActionBar()
(可能是getSupportActionBar()
)
当你问问题时,你会得到一个异常,总是要在代码中显示出这种情况发生的地方。不过我已经发布了一个答案,因为我猜你只是嘲笑得不够。