Developer

1回で複数の呼び出しのあるMockテストクラス【Salesforce】

Developer
この記事は約2分で読めます。

こんにちは、アンダーソンです。
今回はMockを使ったテストクラスで少しハマった案件があったので
そのことについて書いていきます。

スポンサーリンク

一度に複数呼び出しするクラスの場合

今回クラス内でPOSTしてからサービスからトークンなどを取得して、
その内容で再度GETをするためにコールアウトするという内容なんですが、
普通にMockテストクラスを用意してしまうと、
どちらかの呼び出しの際に返却される値が違うため
エラーになってしまう可能性があります。

でこの時のMockクラスの書き方なんですが、
ものすごく簡単な方法で2種類の呼び出しに対応したものを作成できます。

global class TestClassResponce implements HttpCalloutMock {

    global HttpResponse respond(HttpRequest req){
        HttpResponse res = new HttpResponse();
        if (req.getMethod() == 'GET') {
            res.setHeader('Content-type', 'application/json');
            res.setBody('{"Test":"test"}');
            res.setStatusCode(200);
            return res;
        } else {
            res.setHeader('Content-Type', ''application/json;charset=UTF-8'');
            res.setBody('{"name":"TestName"}');
            res.setStatusCode(200);
            return res;
        }
    }
}

req.getMethod()でメソッドの種類を取得できるので、
GETなのかPOSTなのかを判別することができます。
それによって返却する値を変えることでコードをカバーすることができます。

めっちゃ簡単なことなんですが、自分自身、複数呼び出しのクラスのテストを
書いたのが初めてだったので備忘録として残しておきます。

その他の開発に関する記事はこちらです。

Developerも含めた試験問題にチャレンジしてみましょう。