2

HttpRequestクラスを利用した機能を開発しました。それをテストするために使用しHttpCalloutMockました。この機能は@future (callout=true)メソッド内にあります。のドキュメントに従ってテスト クラスを開発しましたHttpCalloutMock。テスト (2) はサンドボックスに合格しますが、本番環境にデプロイすると、どちらもアサーション ラインでエラーSystem.NullPointerException(明らかに the HttpResponseis null) が発生します。HttpCalloutMock同じ Test クラス内のテストと実装のコードを次に示します。

@isTest
global class TrustCalloutTest {

    global class TrustCalloutMockBasicCallout implements HttpCalloutMock {

        global HTTPResponse respond(HTTPRequest req) {

            HttpResponse res = new HttpResponse();
            res.setBody('TEST');
            res.setStatusCode(200);
            return res;
        }
    }

    global class TrustCalloutMockRequestKey implements HttpCalloutMock {

        global HTTPResponse respond(HTTPRequest req) {

            HttpResponse res = new HttpResponse();
            res.setBody('RECEIVED');
            res.setStatusCode(200);
            return res;
        }
    }

    static testmethod void testCalloutRequireKey() {

        HttpResponse res; 
        Test.setMock(HttpCalloutMock.class, new TrustCalloutMockRequestKey());
        res = TrustCallout.requestTransferKey('BLAH','https://beta2.trustpoint.fi/API/requirekey.php');
        System.assertEquals(200, res.getStatusCode());
    }
    static testmethod void testCalloutBasicCallout(){

        HttpResponse res;
        Test.setMock(HttpCalloutMock.class, new TrustCalloutMockBasicCallout()); 
        res = TrustCallout.basicCallout('BLAH','https://beta2.trustpoint.fi/API/committransfer.php');
        System.assertEquals(200, res.getStatusCode());    
    }
}

実際のコールアウトは正常に機能し、ドキュメントにも従っています。何か間違っていることがわかりますか?

ありがとう。

MGA。

4

1 に答える 1

1

非常に奇妙に見え、サンドボックスと実稼働環境の間で何かが異なることを示しています。

メソッドが何らかの理由でTrustCallout.requestTransferKey()実際に呼び出されておらず、返されている可能性はありますか?Http.send()Null

実行パスをたどるために、テスト実行のデバッグ ログを確認しましたか? System.debug()に呼び出しを追加しrequestTransferKey()て、まだ呼び出していることを確認できますHttp.send()か? そして、あなたのコードTrustCalloutMockRequestKey.respond()が実際に実行されていることを確認しますか?

于 2013-02-12T16:31:01.390 に答える