部署HttpCalloutMock时出现异常

时间:2013-02-12 13:19:29

标签: nullpointerexception salesforce httprequest apex-code

我开发了一个使用HttpRequest类的功能。为了测试它,我使用了HttpCalloutMock。此功能在@future (callout=true)方法范围内。我根据HttpCalloutMock的文档开发了测试类。测试(2)在沙箱中传递,但在部署到生产时,它们都在断言行中给出错误System.NullPointerException(显然HttpResponse为空)。以下是同一Test类中HttpCalloutMock的测试和实现的代码:

@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。

1 个答案:

答案 0 :(得分:1)

看起来非常奇怪,并且会指出沙盒和生产环境之间的不同之处。

由于某种原因,您的TrustCallout.requestTransferKey()方法是否可能实际上没有调用Http.send()并返回Null

您是否从测试运行中查看了调试日志以遵循执行路径?您可以向System.debug()添加requestTransferKey()来电,并确认它仍在调用Http.send()吗?您TrustCalloutMockRequestKey.respond()中的代码实际上正在运行吗?