我开发了一个使用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。
答案 0 :(得分:1)
看起来非常奇怪,并且会指出沙盒和生产环境之间的不同之处。
由于某种原因,您的TrustCallout.requestTransferKey()
方法是否可能实际上没有调用Http.send()
并返回Null
?
您是否从测试运行中查看了调试日志以遵循执行路径?您可以向System.debug()
添加requestTransferKey()
来电,并确认它仍在调用Http.send()
吗?您TrustCalloutMockRequestKey.respond()
中的代码实际上正在运行吗?