4

ロボギースで足を濡らしたところ、いいね!

DB や LocationManger などに依存するメソッドが非常に多いため、これらをテストするときに実際のオブジェクトを使用するため、これらのオブジェクトをモックして、テスト中に何にも依存する必要がないようにしたいと考えています。

私もmockitoを使用していますが、どうすればこれを行うことができるかわかりませんか?

Androidシステムにはさまざまなモックが付属していることは知っていますが、mockitoを使用して自分で作成した方がよいと思いますか?

どちらの場合でも、テスト時にそれらを注入する必要があります。

誰でもこれについて何か考えがありますか?

前もって感謝します

4

3 に答える 3

4

https://github.com/roboguice/roboguice/blob/master/astroboy/src/test/java/org/roboguice/astroboy/controller/Astroboy2Test.javaを見てください。これはModules.override()、デフォルトのモジュールをいくつかのテストでオーバーライドするために使用します-特定の構成。

@Before
public void setup() {
    // Override the default RoboGuice module
    RoboGuice.setBaseApplicationInjector(Robolectric.application, RoboGuice.DEFAULT_STAGE, Modules.override(RoboGuice.newDefaultRoboModule(Robolectric.application)).with(new MyTestModule()));
    // For roboguice 4.0 and robolectric 3.1.2
    RoboGuice.getOrCreateBaseApplicationInjector(RuntimeEnvironment.application, RoboGuice.DEFAULT_STAGE, Modules.override(RoboGuice.newDefaultRoboModule(RuntimeEnvironment.application)).with(new MyTestModule()));
}
于 2012-07-24T18:15:54.727 に答える
3

私が探していたときにトップヒットだったので、これを拡張するだけです...

デフォルトの RoboGuice モジュールをオーバーライドするようにテスト クラス (またはテスト ランナー) を設定したら、オーバーライドされた RoboGuice モジュールを次のように設定します (この例では)。

public class TestModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(LocationManager.class).toInstance((LocationManager) Robolectric.application.getSystemService(Context.LOCATION_SERVICE));
    }
}

次に、RoboGuice は、アプリケーションと同じロケーション マネージャーをテストに挿入します。また、そのシャドウをインスタンス化し、予想される場所、プロバイダーの状態などを設定できます。

@Test
public void mapLoadsCenteredOnPhoneLocationWhenNoTargetIntent() {
    Location l = new Location("test");
    l.setLatitude(Double.parseDouble("52.222"));
    l.setLongitude(Double.parseDouble("-2.222"));
    shadowLocationManager.setLastKnownLocation(GPS_PROVIDER, l);
    shadowLocationManager.setProviderEnabled(GPS_PROVIDER, true);
    shadowLocationManager.setProviderEnabled(NETWORK_PROVIDER, false);
            //snip
}
于 2012-09-14T13:33:18.760 に答える