function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
HayatarHayatar 

HTTPResponseをテストが通れるようにできませんか?

こんにちは


ApexによるWebサービス呼び出しについてなのですが

例えば以下のようなクラスがあるとします。

    public class test {
        public static void main(String a, String b, String c){
            //リクエスト作成
            HttpRequest req = new HttpRequest();
            req.setMethod('POST');
            req.setEndpoint('http:~~');
            req.setHeader('Date',a);
            req.setHeader('Security',b);
            req.setBody(c);

            Http http = new Http();
            
            HTTPResponse res = http.send(req);
        }
    }

これをTestMethodを使用してテストをすると
「TestMethod として定義されたメソッドは、Web サービスコールアウトをサポートしないため、テストはスキップされます。」
と出てテストが中断されてしまいます。

 

また、developerforce.comの「Apexコードテストメソッドの概要」に載っている

「Web サービス処理を 3 つのメソッドに分割することで、ほとんどの Apex コードがテスト可能になります。」
と書かれたコードをまるごとコピーしてテストを実行しても
上記に書いたメッセージが出てテストが中断されます。

どうにかしてHTTPResponseをテストが通れるようにできませんか?

よろしくお願いします。

tajimatajima

こちらが参考になりますでしょうか?

http://wiki.developerforce.com/index.php?title=Virtual_Callout_Testing

HayatarHayatar

コメントありがとうございます。

 

載せていただいたサイトのコードを試してみましたが

やはりうまく動きませんでした。

 

私のやり方が悪いのでしょうか・・・

HayatarHayatar

自己解決という形になるのでしょうか

TestMethodでもエラー時に止まらず実行出来るようにはできました。

try、catchでエラーを受け取ることができました。

 

    public class test {
        public static void main(String a, String b, String c){
            //リクエスト作成
            HttpRequest req = new HttpRequest();
            req.setMethod('POST');
            req.setEndpoint('http:~~');
            req.setHeader('Date',a);
            req.setHeader('Security',b);
            req.setBody(c);

            Http http = new Http();

try{
                    HTTPResponse res = http.send(req);

} catch(Exception e){

}
        }
    }

 

このように囲むとエラーが出てもExceptionに行くため止まらずに処理が進みます。

ただ、これだとResponseでエラーが出ても進んでしまうため少し不安です。