1. 概要

この記事では、 Hoverfly Javaライブラリを見ていきます。これは、実際のAPIスタブ/シミュレーションを簡単に作成する方法を提供します。

2. Mavenの依存関係

Hoverflyを使用するには、単一のMaven依存関係を追加する必要があります。

<dependency>
    <groupId>io.specto</groupId>
    <artifactId>hoverfly-java</artifactId>
    <version>0.8.1</version>
</dependency>

最新バージョンはここにあります。

3. APIのシミュレーション

まず、シミュレーションモードで実行するようにHoverflyを構成します。 シミュレーションを定義する最も簡単な方法は、DSLを使用することです。

HoverflyRule インスタンスをインスタンス化することにより、簡単な例から始めましょう。

public static final HoverflyRule rule
  = HoverflyRule.inSimulationMode(dsl(
    service("http://www.baeldung.com")
      .get("/api/courses/1")
      .willReturn(success().body(
        jsonWithSingleQuotes("{'id':'1','name':'HCI'}"))));

SimulationSource クラスは、API定義を開始するためのdslメソッドを提供します。 また、HoverflyDSLserviceメソッドを使用すると、エンドポイントと関連する要求パスを定義できます。

次に、 willReturn を呼び出して、どの応答を返したいかを示します。 また、ResponseBuildersuccessメソッドを使用して、応答ステータスと本文を設定しました。

4. テストにJUnitを使用する

スタブされたAPIは、JUnitを使用して簡単にテストできます。

HTTPリクエストを送信する簡単なテストを作成し、それがエンドポイントに到達するかどうかを確認しましょう。

responseEntity<String> courseResponse
  = restTemplate.getForEntity("http://www.baeldung.com/api/courses/1", String.class);
 
assertEquals(HttpStatus.OK, courseResponse.getStatusCode());
assertEquals("{\"id\":\"1\",\"name\":\"HCI\"}", courseResponse.getBody());

SpringWebモジュールのRestTemplateクラスインスタンスを使用してHTTPリクエストを送信しました。

5. 遅延の追加

遅延は、特定のHTTPメソッド、または特定のAPI呼び出しに対してグローバルに追加できます。

POSTメソッドを使用したリクエストの遅延を設定するコードの例を次に示します。

SimulationSource.dsl(
  service("http://www.baeldung.com")
    .post("/api/courses")
    .willReturn(success())
    .andDelay(3, TimeUnit.SECONDS)
    .forMethod("POST")
)

6. マッチャーをリクエスト

HoverflyMatchers ファクトリクラスは、URL用のexactMatchglobMatchを含むいくつかのマッチャーを提供します。 HTTPボディの場合は提供されます。

HTTP本体の場合、 JSON /XMLの完全一致とJSONPath/XPathの一致を提供します。

デフォルトでは、exactMatchマッチャーがURLと本文の両方のマッチングに使用されます。

さまざまなマッチャーの使用例を次に示します。

SimulationSource.dsl(
  service(matches("www.*dung.com"))
    .get(startsWith("/api/student")) 
    .queryParam("page", any()) 
    .willReturn(success())
 
    .post(equalsTo("/api/student"))
    .body(equalsToJson(jsonWithSingleQuotes("{'id':'1','name':'Joe'}")))
    .willReturn(success())
 
    .put("/api/student/1")
    .body(matchesJsonPath("$.name")) 
    .willReturn(success())
 
    .post("/api/student")
    .body(equalsToXml("<student><id>2</id><name>John</name></student>"))
    .willReturn(success())
 
    .put("/api/student/2")
    .body(matchesXPath("/student/name")) 
    .willReturn(success()));
)

この例では、 matches メソッドは、ワイルドカード検索を可能にするglobMatchを使用してURLをチェックします。

次に、 startupsWith は、リクエストパスが「 / api /student」で始まるかどうかを確認します。 any マッチャーを使用して、ページクエリパラメーターで可能なすべての値を許可しました。

equalsToJson matcherは、本文のペイロードがここで指定された正確なJSONと一致することを確認します。 特定のJSONパスの要素をチェックするためのmatchesJsonPathメソッドが存在するかどうか。

同様に、 equalsToXml は、リクエスト本文で指定されたXMLをここで指定されたXMLと一致させます。 matchesXPath は、本体をXPath式と一致させます。

7. 結論

このクイックチュートリアルでは、HoverflyJavaライブラリの使用法について説明しました。 HTTPサービス、エンドポイントを構成するためのDSL、遅延の追加、およびリクエストマッチャーの使用のシミュレーションを検討しました。 また、JUnitを使用してこれらのサービスをテストすることも検討しました。

いつものように、コードスニペットはいつものように、GitHubにあります。