Salesforce: Web Service Callout Test Class
August 27, 2012 /
Posted in Salesforce Corner
In Salesforce, if you are trying to perform a Web Service Callout in a test class, you will get an error. For example:
public String sendHttpRequest(String endpointUrl, String method, DOM.Document body) { ... HttpRequest req = new HttpRequest(); req.setEndpoint(endpointUrl); req.setMethod(method); req.setBody(bodyStr); Http http = new Http(); HttpResponse res = http.send(req); return res.getBody(); }
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:
public String sendHttpRequest(String endpointUrl, String method, DOM.Document body, Boolean isTest) { ... HttpRequest req = new HttpRequest(); req.setEndpoint(endpointUrl); req.setMethod(method); req.setBody(bodyStr); Http http = new Http(); if(isTest) { HttpResponse res = http.send(req); return res.getBody() } else { // You can prepare some simulated data for your test class here return simulatedData; } }
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);
- You can call the sendHttpRequest method and set the isTest parameter to 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);
- In the test process, all you need to do is just set isTest to true.