Java EEを使用したPactコンシューマテストでのサービスの使用

okwaves2024-01-25  10

Java EE アプリケーションに Pact コンシューマ テストを実装したいと考えています。このテストは、実際の REST 呼び出しをトリガーするコンシューマー サービス メソッドを呼び出します。

これまでの Pact テストは次のとおりです。

@ExtendWith(PactConsumerTestExt.class)
@PactTestFor(providerName = "my-service")
public class MyServiceConsumerTest {

    @Inject
    private MyService myService;

    @Pact(consumer = "myConsumer")
    public RequestResponsePact mail(PactDslWithProvider builder) {
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", ContentType.getJSON().asString());

        PactDslJsonBody jsonBody = new PactDslJsonBody()
                .stringValue("emailAddress", "[email protected]")
                .stringValue("subject", "Test subject")
                .stringValue("content", "Test content")
                .asBody();

        return builder
                .given("DEFAULT_STATE")
                .uponReceiving("request for sending a mail")
                    .path("/mail")
                    .method("POST")
                    .headers(headers)
                    .body(jsonBody)
                .willRespondWith()
                    .status(Response.Status.OK.getStatusCode())
                .toPact();
    }

    @Test
    @PactTestFor(pactMethod = "mail")
    public void sendMail() {
        MailNotification mailNotification = MailNotification.builder()
                .emailAddress("[email protected]")
                .subject("Test subject")
                .content("Test content")
                .build();
        myService.sendNotification(mailNotification);
    }
}

興味深い部分は次の行です。

myService.sendNotification(mailNotification);

コンシューマ単体テストを実行しているため、MyService の注入が機能しません。つまり、myService が null になります。さらに、Pact の模擬サーバーに対してリクエストを送信するようにサービスに指示する必要があると思います?

もちろん、テストで最後の REST リクエストを発行することもできますが、これではサービス ロジックが無視されます。

ここで何かが足りないと思いますか?



------------------------

はい、@PactVerification テストでモック サーバーをヒットする必要があります。実際のアプリケーション コードなしで起動しないでください。将来変更があった場合に備えて、これはある程度意味があります。そのリクエストの HTTP プロパティを変更するとテストは失敗するはずです

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。