2013-02-12 135 views
2

我开发了一个使用HttpRequest类的功能。为了测试它,我使用HttpCalloutMock。该功能位于@future (callout=true)方法中。我根据HttpCalloutMock的文档开发了测试课程。测试(2)在沙箱中传递,但在部署到生产时,它们在断言行中都会给出错误System.NullPointerException(显然HttpResponse为空)。下面是同一个测试类中的测试和实现对HttpCalloutMock代码:部署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

看起来很奇怪,并且会指出沙箱和生产环境之间的差异。

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

你看过从测试运行的调试日志来跟随执行路径吗?您能否将System.debug()呼叫添加到requestTransferKey()并确认它仍然呼叫Http.send()?并且TrustCalloutMockRequestKey.respond()中的代码实际上正在运行?

+0

你有没有找到解决这个问题的方法? – 2013-05-21 14:12:52