2017-04-02 75 views
0

我正在測試一個活動,我想模擬getActionBar()。我試着這樣做通常的方式,那就是模擬getActionBar()返回null

ActionBar mActionBar; 

@Before 
public void setup() { 
    initMocks(this); 
    mActionBar = Mockito.mock(ActionBar.class); 
} 

@Test 
public void someTest(){ 
    when(activity.getActionBar()).thenReturn(mActionBar); 
} 

但是,這似乎並沒有做任何事情,因爲我還得到一個NPE,當我嘗試使用在活動操作欄getActionBar()後。

+0

當提出問題,並且您收到異常時,請始終在代碼中顯示發生這種情況的位置。我已經發布了一個答案,因爲我猜你只是沒有充分嘲笑。 – john16384

回答

1

你可能會呼籲在代碼中嘲笑ActionBar其他方法正在測試,例如像:

Tab tab = actionBar.getSelectedTab() 

這將返回null。使用tab然後將導致NPE。

這意味着你將需要模擬多種,例如:

when(actionBar.getSelectedTab()).thenReturn(mock(Tab.class)); 

現在上面的例子將返回嘲笑Tab

0

我假設你正在設置Activity,因爲它是寫在Robolectric教程。在活動代碼本身內部沒有簡單的方法來模擬實際活動方法。

我建議你創建TestMyActivity,它擴展了你的活動並且只在測試源中生活。然後,您可以覆蓋getActionBar()(可能是getSupportActionBar()))。

public class TestMyActivity extends MyActivity { 
    @Override 
    ActionBar getActionBar() { 
     return mockedActionBar; 
    } 
}