2012-07-24 4 views
8

私はrobolectricを使用していくつかのテストを書いています。今ではいくつかの実際のテストクラスを行いたいと思います。私は気づくRobolectric(android):テストイベントですか?

一つは、私がのonCreateのようなイベントをテストすることができないことである、などのイベントをテストするための標準的な練習を何ですか

...

iは内部のコードのthatsを抽出すべきonLocationChangedイベントを配置してメソッドに配置すると、イベントはメソッドを呼び出し、robolectroもメソッドを呼び出すことができます。もちろん、メソッドは公開される必要がありますか?

私のメソッド内で通常は私的な変数であるものをテストしたい場合は、パブリックゲッターを追加する必要がありますか?だから私はこれをrobolectricから確認することができますか?

robolectricにデータを公開するより良い方法はありますか?

ありがとうございます。

+0

これを解決しましたか?その場合は、回答を選択してください。 –

答えて

7

onCreateをテストするとき、私はrobolectricを呼び出してonCreateを呼び出し、onCreateの後でアクティビティが正しい状態にあることをテストします。 はここに例を示します

@RunWith(RoboTestRunner.class) 
public class DashboardActivityTest { 

    private DashboardActivity activity; 

    @Before 
    public void setUp() throws Exception { 
     activity = new DashboardActivity(); 
    } 

    @After 
    public void tearDown() throws Exception { 
    } 

    @Test 
    public void testDashboardHasButtons() { 
     activity.onCreate(null); 
     Button btn1= (Button) activity.findViewById(R.id.btn1); 
     assertNotNull(btn1); 
     Button btn2= (Button) activity.findViewById(R.id.btn2); 
     assertNotNull(btn2); 
    } 
} 

テストのプライベートメソッドは通常、あなたのデザインが改善される可能性を示しているとRobolectric特有の問題ではありません。

議論の多くのために、この質問を参照してください:RobolectricのV2のとおり How do I test a class that has private methods, fields or inner classes?

6

を、これが今の活動を開始するための適切な方法ではありません。

MyActivity testActivity = new MyActivity(); 
testActivity.onCreate(null); 

今、適切な方法は、これを使用することです:

MyActivity testActivity = Robolectric.buildActivity(MyActivity.class).create().get(); 

これは、onCreateを呼び出した後のアクティビティのインスタンスを提供します。
onStart、onResume、onPauseなどをテストする場合は、これは同じ方法で、もっと多くのメソッドです。

MyActivity testActivity = Robolectric.buildActivity(MyActivity.class).create().start().resume().pause().stop().destroy().get(); 

(あなたが望む活動の正確なインスタンスをテストするために、上記のコード行のメソッドを追加または削除)

ちょうどRobolectricの本当に新しい便利な機能を明確にしたかったです。