Tuesday, 28 July 2015

Test class for Webservice Callout

Webservice class:
-----------------
globalclass RecordCreationservicecls {
       webservicestatic String createRecord(String jsonString){
              //Process to create a record
              return'';
       }
}



Generated class for the above web service class “RecordCreationservicecls”

//Generated by wsdl2apex
publicclass GeneratedRecordCreationService {
publicclass LogInfo {
public String category;
public String level;
private String[] category_type_info = new String[]{'category','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] level_type_info = new String[]{'level','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'category','level'};
    }
publicclass AllowFieldTruncationHeader_element {
public Boolean allowFieldTruncation;
private String[] allowFieldTruncation_type_info = new String[]{'allowFieldTruncation','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'allowFieldTruncation'};
    }
publicclass DebuggingHeader_element {
public GeneratedRecordCreationService.LogInfo[] categories;
public String debugLevel;
private String[] categories_type_info = new String[]{'categories','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'0','-1','false'};
private String[] debugLevel_type_info = new String[]{'debugLevel','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'categories','debugLevel'};
    }
publicclass CallOptions_element {
public String client;
private String[] client_type_info = new String[]{'client','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'client'};
    }
publicclass location {
public Double latitude;
public Double longitude;
private String[] latitude_type_info = new String[]{'latitude','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] longitude_type_info = new String[]{'longitude','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'latitude','longitude'};
    }
publicclass address {
public String city;
public String country;
public String countryCode;
public String postalCode;
public String state;
public String stateCode;
public String street;
private String[] city_type_info = new String[]{'city','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] country_type_info = new String[]{'country','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] countryCode_type_info = new String[]{'countryCode','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] postalCode_type_info = new String[]{'postalCode','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] state_type_info = new String[]{'state','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] stateCode_type_info = new String[]{'stateCode','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] street_type_info = new String[]{'street','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'city','country','countryCode','postalCode','state','stateCode','street'};
    }
publicclass createRecordResponse_element {
public String result;
private String[] result_type_info = new String[]{'result','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','true'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'result'};
    }
publicclass createRecord_element {
public String jsonString;
private String[] jsonString_type_info = new String[]{'jsonString','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','true'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'jsonString'};
    }
publicclass SessionHeader_element {
public String sessionId;
private String[] sessionId_type_info = new String[]{'sessionId','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'sessionId'};
    }
publicclass DebuggingInfo_element {
public String debugLog;
private String[] debugLog_type_info = new String[]{'debugLog','http://soap.sforce.com/schemas/class/RecordCreationservicecls',null,'1','1','false'};
private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls','true','false'};
private String[] field_order_type_info = new String[]{'debugLog'};
    }
publicclass RecordCreationservicecls {
public String endpoint_x = 'https://ap2.salesforce.com/services/Soap/class/RecordCreationservicecls';
public Map<String,String> inputHttpHeaders_x;
public Map<String,String> outputHttpHeaders_x;
public String clientCertName_x;
public String clientCert_x;
public String clientCertPasswd_x;
public Integer timeout_x;
public GeneratedRecordCreationService.AllowFieldTruncationHeader_element AllowFieldTruncationHeader;
public GeneratedRecordCreationService.CallOptions_element CallOptions;
public GeneratedRecordCreationService.SessionHeader_element SessionHeader;
public GeneratedRecordCreationService.DebuggingInfo_element DebuggingInfo;
public GeneratedRecordCreationService.DebuggingHeader_element DebuggingHeader;
private String AllowFieldTruncationHeader_hns = 'AllowFieldTruncationHeader=http://soap.sforce.com/schemas/class/RecordCreationservicecls';
private String CallOptions_hns = 'CallOptions=http://soap.sforce.com/schemas/class/RecordCreationservicecls';
private String SessionHeader_hns = 'SessionHeader=http://soap.sforce.com/schemas/class/RecordCreationservicecls';
private String DebuggingInfo_hns = 'DebuggingInfo=http://soap.sforce.com/schemas/class/RecordCreationservicecls';
private String DebuggingHeader_hns = 'DebuggingHeader=http://soap.sforce.com/schemas/class/RecordCreationservicecls';
private String[] ns_map_type_info = new String[]{'http://soap.sforce.com/schemas/class/RecordCreationservicecls', 'GeneratedRecordCreationService'};
public String createRecord(String jsonString) {
            GeneratedRecordCreationService.createRecord_element request_x = new GeneratedRecordCreationService.createRecord_element();
            request_x.jsonString = jsonString;
            GeneratedRecordCreationService.createRecordResponse_element response_x;
            Map<String, GeneratedRecordCreationService.createRecordResponse_element> response_map_x = new Map<String, GeneratedRecordCreationService.createRecordResponse_element>();
            response_map_x.put('response_x', response_x);
            WebServiceCallout.invoke(
this,
              request_x,
              response_map_x,
new String[]{endpoint_x,
'',
'http://soap.sforce.com/schemas/class/RecordCreationservicecls',
'createRecord',
'http://soap.sforce.com/schemas/class/RecordCreationservicecls',
'createRecordResponse',
'GeneratedRecordCreationService.createRecordResponse_element'}
            );
            response_x = response_map_x.get('response_x');
return response_x.result;
        }
    }
}

Create Service Mockup:
Sample Mockup class:
Create Mockupclass:
------------------------
global class YourWebServiceMockImpl implements WebServiceMock {
   global void doInvoke(
           Object stub,
           Object request,
           Map<String, Object> response,
           String endpoint,
           String soapAction,
           String requestName,
           String responseNS,
           String responseName,
           String responseType) {

        // Create response element from the autogenerated class.
        // Populate response element.
        // Add response element to the response parameter, as follows:
        response.put('response_x', responseElement);
   }
}

Original Mockup class:
globalclass GeneratedRecordCreationServiceMockupcls implements WebServiceMock {
       globalvoid doInvoke(
           Object stub,
           Object request,
           Map<String, Object> response,
           String endpoint,
           String soapAction,
           String requestName,
           String responseNS,
           String responseName,
           String responseType) {

// Create response element from the autogenerated class.
        GeneratedRecordCreationService.createRecordResponse_element responseElement = new GeneratedRecordCreationService.createRecordResponse_element();
//Here createRecordResponse_element is an inner class in generated service class for preparing response
// Populate response element.
        responseElement.result = 'Welcome to Salesfoce';//here we have to set the value for the property result
// Add response element to the response parameter, as follows:
        response.put('response_x', responseElement);
   }
      
}


Test class:
@isTest
privateclass TestGeneratedRecordCreationService {

statictestMethodvoid myUnitTest() {
// TO DO: implement unit test
 Test.setMock(WebServiceMock.class, new GeneratedRecordCreationServiceMockupcls());

        GeneratedRecordCreationService.RecordCreationservicecls recordCreationObj = new  GeneratedRecordCreationService.RecordCreationservicecls();
       recordCreationObj.createRecord('Give input');
      //This method “createRecord” contains the webservice callout.
    }
}

So by using mockup class we can do test code coverage for the method which includes web service callout .

References:

3 comments:

  1. I am writing a test class and I am getting this error: System.TypeException: Methods defined as TestMethod do not support Web service callouts
    Here is my Test class
    @isTest
    public class Test_CSS_SOAPEDS {

    @isTest static void testEchoString() {
    // This causes a fake response to be generated

    String title = 'Customer Name:CSS EDS WS Test ';
    String workorder = 'workorder1';
    String model = 'null'; //"ISC CM2150"; //"ISB CM850";
    String serialNumber = '46826048';
    String locale = 'en';
    string userGroup=System.Label.UserGroup;
    string userName=System.Label.UserName;
    string encryptedKey = CSS_SOAPEDS.getgenerateToken(userName,userGroup);
    string systemDate;
    string token=userName+';'+userGroup+';datetime-'+systemDate;
    System.debug('The encryptedKey '+encryptedKey);
    System.debug('The title id '+title);
    string session = CSS_SOAPEDS.login(encryptedKey,locale);
    // Call the method that invokes a callout
    Test.setMock(WebServiceMock.class, new EDSwebcalloutMockImpl());
    String output = CSS_SOAPEDS.createDS(session,title,serialNumber,model,workorder);
    System.debug('The output '+output);
    // Verify that a fake result is returned
    System.assertEquals('DSBDT3829', output);
    }
    }

    Below is my web service mock class

    @isTest
    global class EDSwebcalloutMockImpl implements WebServiceMock{
    global void doInvoke(
    Object stub,
    Object request,
    Map response,
    String endpoint,
    String soapAction,
    String requestName,
    String responseNS,
    String responseName,
    String responseType) {
    wwwKaidaraCom.createDiagnosticSessionResponse response_elem = new wwwKaidaraCom.createDiagnosticSessionResponse();
    wwwKaidaraComKaidaraservice.resultDiagnosticSession dsID = new wwwKaidaraComKaidaraservice.resultDiagnosticSession();
    dsID.ID='DSBDT3829';
    system.debug('DSBDT3829<><>' + dsID.ID);
    response_elem.return_x = dsID;
    response.put('response_x', response_elem);

    }
    }

    Can YOU help me with this?
    Thank You
    Varun Sinha

    ReplyDelete
  2. What does a Sales consultant do?
    <a href="http://www.appshark.com/salesforce-services/>salesforce consulting services</a>

    ReplyDelete
  3. Detailed article on test class for web service callout saleforce online training Hyderabad. saleforce lightning training using Java and salesforce

    ReplyDelete

Best Practices for Building Prompt Templates

 Hi, The following best practices should be considered when building prompt templates: Make sure that your prompt templates are concise and ...