2013-02-12 133 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