我正在测试一项活动,我想模仿getActionBar()
。我试过通常的做法,就是
ActionBar mActionBar;
@Before
public void setup() {
initMocks(this);
mActionBar = Mockito.mock(ActionBar.class);
}
@Test
public void someTest(){
when(activity.getActionBar()).thenReturn(mActionBar);
}
但这似乎没有做任何事情,因为当我在getActionBar()
之后尝试使用活动中的操作栏时,我仍然会获得NPE。
答案 0 :(得分:1)
您可能在正在测试的代码中调用模拟@post.comments.build(params[:comment].permit(:text))
上的其他方法,例如:
ActionBar
返回Tab tab = actionBar.getSelectedTab()
。然后使用null
将导致NPE。
这意味着你需要模拟更多,例如:
tab
现在上面的示例将返回一个模拟的when(actionBar.getSelectedTab()).thenReturn(mock(Tab.class));
。
答案 1 :(得分:0)
我假设您正在设置Activity
,因为它是在 Robolectric 教程中编写的。没有简单的方法来模拟活动代码本身内部的真实活动方法。
我建议您创建TestMyActivity
来扩展您的活动并仅在测试源中生存。然后,您可以覆盖getActionBar()
(可能是getSupportActionBar()
)。
public class TestMyActivity extends MyActivity {
@Override
ActionBar getActionBar() {
return mockedActionBar;
}
}