0

ログイン画面を備えた小さなアプリケーションを開発し、それを自動化するための Espresso スクリプトも作成しました。

WireMock が Web サービスのスタブ化とモック化のための柔軟なライブラリであることは知っています。その助けを借りて、実際の HTTP サーバーを作成して、テスト中のコードを実際の Web サービスと同じように接続できます。

ここで、wiremock を使用してログイン画面用の Web サービスを開発したいと考えています。ここで提供される詳細を確認しまし たが、説明が技術的すぎます。チュートリアル、リファレンス、または同じことを行う方法のアイデアがあれば、それは素晴らしいことです。

以下のツールを使用しています。

  • Android スタジオ
  • エスプレッソ
  • Gradle ビルド ツール
4

3 に答える 3

1

免責事項: 私は Java 開発者であり、Android で開発したことはありません。

それは本当にあなたがやりたいことですか?Web サービスの呼び出しをインターフェイスを持つクラスにラップしてみませんか? ( jaxrsなどを使用)。( mockitoなどを使用して) 普通の古いインターフェイスをモックできるため、テストははるかに簡単になります。

このアプローチには、Web サービス インターフェイスが互換性のない方法で変更された場合にテストが「すぐに失敗する」という利点があります (テストがコンパイルされなくなるため)。

http 要求/応答を常にモックすることは、インターフェイスをモックすることと比較して、冗長で維持するのが難しいように聞こえます。

于 2015-09-18T08:37:06.020 に答える
0

次のように、受け入れユニット テストから wiremock を実行できます。

@Rule
public WireMockRule wireMockRule = new WireMockRule(options().port(PORT).notifier(new ConsoleNotifier(true)));

@Rule
public ActivityTestRule<T> activityRule = new ActivityTestRule<T>(type) {
        @Override
        protected void beforeActivityLaunched() {
            stubFor(get(urlPathEqualTo("/myUrl"))
            .willReturn(aResponse()
                    .withStatus(200)
                    .withBody("{ 'status': 'OK' }")));
        }
    };

@Before
public void before() {
    activityRule.getActivity();
}

@Test
public void test() {
    // using espresso trigger the call on your activity
}

エスプレッソが用意されていて、その使い方を知っていると仮定しました。スタブは beforeActivityLaunched メソッドにある必要があることに注意してください。そうしないと、アクティビティが開始時にいくつかの呼び出しを行う場合、スタブはまだ準備ができていません。

于 2016-10-14T08:35:47.810 に答える
-1

以前の回答に追加し、 Wiremock JAX-RS の使用を提案したいと思います(免責事項: 私は作成者です)。インターフェースを JAX-RS で表現する場合は、スタブを自動化できます。

WireMockJaxrs.invocation(...)次のように使用されるメソッドを追加します。

final List<ItemDTO> responseObject = Arrays.asList(new ItemDTO("pong"));
final StubMapping sm =
    stubFor( //
        invocation(ItemResouce.class, (r) -> r.getItems()) //
            .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject));
于 2019-04-23T17:28:03.897 に答える