2013-02-12 4 views
2

J'ai développé une fonctionnalité qui utilise la classe HttpRequest. Afin de le tester j'ai utilisé HttpCalloutMock. Cette fonctionnalité est dans une méthode @future (callout=true). J'ai développé les classes de test suivant la documentation pour HttpCalloutMock. Les tests (2) passent dans le bac à sable, mais lors du déploiement en production, ils donnent l'erreur System.NullPointerException (apparemment le HttpResponse est nul) dans la ligne d'assertion. Voici le code pour les tests et les mises en œuvre pour HttpCalloutMock dans la même classe de test:Exception lors du déploiement d'un 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());  
    } 
} 

La réelle fonctionne normalement callout, et il suit également la documentation. Pouvez-vous repérer quelque chose de mal?

Merci.

MGA.

Répondre

1

Cela semble très étrange, et indiquerait quelque chose qui est différent entre votre sandbox et l'environnement de production.

Est-il possible que votre méthode TrustCallout.requestTransferKey() n'appelle pas réellement Http.send() pour une raison quelconque et renvoie Null?

Avez-vous regardé un journal de débogage du test pour suivre le chemin d'exécution? Pouvez-vous ajouter System.debug() appels à requestTransferKey() et confirmer qu'il appelle toujours Http.send()? Et que votre code dans TrustCalloutMockRequestKey.respond() est en cours d'exécution?

+0

avez-vous déjà trouvé une solution? –

Questions connexes