2017-04-21 3 views
1

robolectric 3.3.2を使用してアクティビティをテストしようとしています。 ダイレクトコールとしてのモックとアクティビティのメンバー初期化がNPEになります。onCreateの前のモックアクティビティクラスメンバー

コード上方試し
ActivityController<MyActivity> activityController = 
       Robolectric.buildActivity(MyActivity.class); 
mTestActivity = activityController.get(); 

Mockito.when(mTestActivity.getCountry()).thenReturn("xxxx"); 
activityController.setup(); 

が、セットアップ。()(OnCreate関数) はgetCountryメソッドのモックを無視し、アクティビティの定義を呼び出します。

これを達成する方法はありますか?

答えて

0

スパイ(@Spy,Mockito.spy())を使用しても、このようには動作しません。

public class MyActivityTest{ 

    public static class StubMyActivity extends MyActivity { 
     Country getCountry() { 
      return someSpecialCountry; 
     } 
    } 

    @Before 
    public void setUp(){ 
     ActivityController<StubMyActivity> activityController = 
       Robolectric.buildActivity(StubMyActivity.class); 
     mTestActivity = activityController.setup().get(); 
    }  
} 
+0

おかげオイゲン:

あなたはスタブを使用する必要があります。私は上記の解決策を試みた。しかし、それは文字列リソースを見つけることができません。 android.content.res.Resources $ NotFoundException:文字列リソースID#0x7f0d0037。この例外は、私がStubactivityを使用しないときは表示されません。ここに何か間違いがありますか? – jsam

+0

"manifest flie not found"のようなログメッセージが表示されますか? –

+0

マニフェストが配置されました。しかし、私のコードは別のパッケージのリソースを参照していました。RobolectricTesRunnerを拡張し、カスタムパスを追加することで修正されました。 "Rには最終フィールドが含まれていますが、これはコンパイラによってインライン展開され、再マッピングできません"というのは、3.2.1,3.3のようなrobolectricの新しいバージョンで起こっていることです。あなたはこれに気付いていますか? – jsam

関連する問題