2011-12-16 5 views
1

私は、クラスが特定のコールバックシーケンスを呼び出すと予想されるAndroidアプリケーションの一部をテストしようとしています。 Androidに付属しているJUnitのバージョンでこれを処理するための良い仕組みがありますか?Androidでのユニットテストのイベントシーケンス

これまでのところ、ここで私は心の中で持っているものです:

testObj.call(new Listener() { 
    boolean a = false, b = false, c = false; 

    @Override 
    public doA() { 
    assertFalse(a); 
    a = true; 
    } 

    @Override 
    public doB() { 
    assertTrue(a); 
    assertFalse(b); 
    b = true; 
    } 

    @Override 
    public doC() { 
    assertTrue(b); 
    assertFalse(c); 
    c = true; 
    }); 

assertTrue(c); // I know this won't work, but something like this 

何がしたいことは何かのような...標準JVMで

final PhaseTester phazer = new PhaseTester(); 
testObj.call(new Listener() { 
    @Override 
    public doA() { 
    phazer.doPhase(1); 
    } 

    @Override 
    public doA() { 
    phazer.doPhase(2); 
    } 

    @Override 
    public doA() { 
    phazer.doPhase(3); 
    } 
}); 

assertTrue(phazer.maxPhase(), 3); 

答えて

1

などMockitoなどモックフレームワークであり、あなたにこのタイプのテストを提供します。私はAndriodの開発を一度も行っておらず、従来のMockingフレームワークはDalvik JVMで動作しないことを認識しています。しかし、私はRoboelectricに関するこの記事を見つけました。これはあなたのコードをAndroidエミュレータの外でユニットテストすることを可能にします。

次のような、コード何か...

import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.verify; 

@Test 
public void testSomething() { 

    // create a mock object 
    PhaseTester phaser = mock(PhaseTester.class); 

    // perform test 
    TestObj testObj = new TestObj(); 
    testObj.call(phaser); 

    // verfiy the mock object was called 
    verify(phaser).doA(); 
    verify(phaser).doB(); 
    verify(phaser).doC(); 

} 
+0

うんのrobolectricとmockito、まさに我々が使用することができます。静的な問題のみです:@ – Blundell

+0

その後、[PowerMock with Mockito](http://code.google.com/p/powermock/wiki/MockitoUsage)を使用して、Robolectricではできない統計 – Brad

+0

を処理できます。テストランナーが使用され、いくつかの複雑なシーンの背後にあるため、sh * t :-) – Blundell

関連する問題