2017-04-02 21 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); 
} 

である。しかし、それは私がgetActionBar()後の活動でアクションバーを使用してみたときに、私はまだ、NPEを取得しているため、何もしていないようです。おそらく、コード内で嘲笑ActionBar上の他のメソッドを呼び出している

+0

質問があり、例外が発生した場合は、コード内でどこで発生するかを常に表示してください。私はあなたがちょうど十分に嘲笑しなかったと思っているように私は答えを投稿しました。 – john16384

答えて

1

あなたは、例えば同様に、テストしている:

Tab tab = actionBar.getSelectedTab() 

これはnullを返します。 tabを使用すると、NPEが発生します。

これにより、たとえば、より多くのを模擬する必要があることを意味します:

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

今、上記の例では嘲笑Tabを返します。

0

Robolectricチュートリアルで書かれているようにActivityを設定しているとします。実際のアクティビティメソッドをアクティビティコード自体の中で模擬する簡単な方法はありません。

あなたの活動を拡張し、テストソースにのみ住んでいるTestMyActivityを作成することをお勧めします。次にgetActionBar()(おそらくgetSupportActionBar()))を上書きすることができます。

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