Tuesday, June 11, 2013

In Salesforce, if you are trying to perform a Web Service Callout in a test class, you will get an error. For example:

  1. public String sendHttpRequest(String endpointUrl, String method, DOM.Document body) {
  2.   ...
  3.   HttpRequest req = new HttpRequest();
  4.   req.setEndpoint(endpointUrl);
  5.   req.setMethod(method);
  6.   req.setBody(bodyStr);

  7.   Http http = new Http();
  8.   HttpResponse res = http.send(req);

  9.   return res.getBody();
  10. }

When your test class runs untill line #9, it will stop the entire test process by throwing the following error:

System.TypeException: Methods defined as TestMethod do not support Web service callouts, test skipped callout

What if the overall test coverage is still under 75%? This will become a roadblock for your deployment. Below is the workaround you can consider:

  1. public String sendHttpRequest(String endpointUrl, String method, DOM.Document body, Boolean isTest) {
  2.   ...
  3.   HttpRequest req = new HttpRequest();
  4.   req.setEndpoint(endpointUrl);
  5.   req.setMethod(method);
  6.   req.setBody(bodyStr);

  7.   Http http = new Http();
  8.   if(isTest) {
  9.     HttpResponse res = http.send(req);
  10.     return res.getBody()
  11.   } else {
  12.     // You can prepare some simulated data for your test class here
  13.     return simulatedData;
  14.   }
  15. }

By doing this, you can write different execution as below:

  • Actual Process:
    • You can call the sendHttpRequest method and set the isTest parameter to false.
      • sendHttpRequest(‘your endpoint’, get, ‘http request body’, false);
  • Test Process:
    • In the test process, all you need to do is just set isTest to true.
      • sendHttpRequest(‘your endpoint’, get, ‘http request body’, true);
-->

No comments :

Post a Comment

Labels

visualforce page ( 13 ) apex integration ( 5 ) apex trigger ( 4 ) csv file from vf page ( 4 ) javascript ( 4 ) csv visualforce page ( 3 ) Too many ( 2 ) call out ( 2 ) integration ( 2 ) rest api ( 2 ) salesforce rest api ( 2 ) salesforce to salesforce integration ( 2 ) sfdc rest api ( 2 ) trigger ( 2 ) 15 digit to 18 digit ( 1 ) DML rows in Apex ( 1 ) Date Conversion ( 1 ) Date/Time conversion ( 1 ) Deploy ( 1 ) Objects to Future Annotated Methods ( 1 ) SFDC limits ( 1 ) Sobject to Future Annotated Methods ( 1 ) Test Class ( 1 ) TimeZone Conversion ( 1 ) Too many dml rows ( 1 ) Too many future calls ( 1 ) annotations ( 1 ) apex code ( 1 ) closed opportunities ( 1 ) commit ( 1 ) convert ( 1 ) create records ( 1 ) csv create records ( 1 ) custom setting ( 1 ) deployment ( 1 ) deployment changeset ( 1 ) disable apex class ( 1 ) disable apex trigger ( 1 ) disable in production ( 1 ) document ( 1 ) download ( 1 ) field name ( 1 ) formula fields ( 1 ) iframe ( 1 ) inactive ( 1 ) intellisense ( 1 ) jsforce ( 1 ) limits ( 1 ) matrix report in vf page ( 1 ) multi select ( 1 ) multi select salesforce ( 1 ) multiselect ( 1 ) paypal ( 1 ) picklist ( 1 ) record type ( 1 ) rollback ( 1 ) salesforce limits ( 1 ) salesforce list ( 1 ) salesforce map ( 1 ) salesforce rest ( 1 ) salesforce set ( 1 ) salesforce1 ( 1 ) sandbox deployment ( 1 ) sfdc collection ( 1 ) sfdc list ( 1 ) sfdc map ( 1 ) sfdc rest ( 1 ) sfdc set ( 1 ) uncommitted ( 1 ) updated field ( 1 ) user ( 1 ) validation rule opportunity ( 1 ) validation rules opportunities ( 1 ) vf page ( 1 )

Ad