2

我开发了一个利用HttpRequest类的功能。为了测试它,我使用了HttpCalloutMock. 此功能在@future (callout=true)方法中。我按照HttpCalloutMock. 测试 (2) 在沙盒中通过,但在部署到生产环境时,它们都在断言行中给出错误System.NullPointerException(显然HttpResponse是 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 回答