Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模拟getActionBar()返回null_Java_Android_Mockito_Robolectric - Fatal编程技术网

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()


当你问问题时,你会得到一个异常,总是要在代码中显示出这种情况发生的地方。不过我已经发布了一个答案,因为我猜你只是嘲笑得不够。