Monday, 11 May 2015

Writing Code coverage to Webservice Classes:-

Steps in Service Org:-

1. Write a webservice class.

global class AccountService{
    webservice static void AccountInsert(String accName,String ph){
        Account objA = new Account();
        objA.Name = accName;
        objA.Phone = ph;
        Insert objA;
    }
}

2. Generate a WSDL

save the file with .wsdl extension (ex: AccountService.wsdl)




Steps in Client Org

1. Generate an apex class for the above WSDL.

Below is the generated apex class:

//Generated by wsdl2apex

public class soapSforceComSchemasClassAccountser {
    public class LogInfo {
        public String category;
        public String level;
        private String[] category_type_info = new String[]{'category','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] level_type_info = new String[]{'level','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{'category','level'};
    }
    public class AllowFieldTruncationHeader_element {
        public Boolean allowFieldTruncation;
        private String[] allowFieldTruncation_type_info = new String[]{'allowFieldTruncation','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{'allowFieldTruncation'};
    }
    public class DebuggingHeader_element {
        public soapSforceComSchemasClassAccountser.LogInfo[] categories;
        public String debugLevel;
        private String[] categories_type_info = new String[]{'categories','http://soap.sforce.com/schemas/class/AccountService',null,'0','-1','false'};
        private String[] debugLevel_type_info = new String[]{'debugLevel','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{'categories','debugLevel'};
    }
    public class CallOptions_element {
        public String client;
        private String[] client_type_info = new String[]{'client','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{'client'};
    }
    public class AccountInsert_element {
        public String accName;
        public String ph;
        private String[] accName_type_info = new String[]{'accName','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','true'};
        private String[] ph_type_info = new String[]{'ph','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','true'};
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{'accName','ph'};
    }
    public class location {
        public Double latitude;
        public Double longitude;
        private String[] latitude_type_info = new String[]{'latitude','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] longitude_type_info = new String[]{'longitude','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{'latitude','longitude'};
    }
    public class 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/AccountService',null,'1','1','false'};
        private String[] country_type_info = new String[]{'country','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] countryCode_type_info = new String[]{'countryCode','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] postalCode_type_info = new String[]{'postalCode','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] state_type_info = new String[]{'state','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] stateCode_type_info = new String[]{'stateCode','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] street_type_info = new String[]{'street','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{'city','country','countryCode','postalCode','state','stateCode','street'};
    }
    public class SessionHeader_element {
        public String sessionId;
        private String[] sessionId_type_info = new String[]{'sessionId','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{'sessionId'};
    }
    public class AccountInsertResponse_element {
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{};
    }
    public class DebuggingInfo_element {
        public String debugLog;
        private String[] debugLog_type_info = new String[]{'debugLog','http://soap.sforce.com/schemas/class/AccountService',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService','true','false'};
        private String[] field_order_type_info = new String[]{'debugLog'};
    }
    public class AccountService {
        public String endpoint_x = 'https://ap2.salesforce.com/services/Soap/class/AccountService';
        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 soapSforceComSchemasClassAccountser.DebuggingInfo_element DebuggingInfo;
        public soapSforceComSchemasClassAccountser.AllowFieldTruncationHeader_element AllowFieldTruncationHeader;
        public soapSforceComSchemasClassAccountser.DebuggingHeader_element DebuggingHeader;
        public soapSforceComSchemasClassAccountser.CallOptions_element CallOptions;
        public soapSforceComSchemasClassAccountser.SessionHeader_element SessionHeader;
        private String DebuggingInfo_hns = 'DebuggingInfo=http://soap.sforce.com/schemas/class/AccountService';
        private String AllowFieldTruncationHeader_hns = 'AllowFieldTruncationHeader=http://soap.sforce.com/schemas/class/AccountService';
        private String DebuggingHeader_hns = 'DebuggingHeader=http://soap.sforce.com/schemas/class/AccountService';
        private String CallOptions_hns = 'CallOptions=http://soap.sforce.com/schemas/class/AccountService';
        private String SessionHeader_hns = 'SessionHeader=http://soap.sforce.com/schemas/class/AccountService';
        private String[] ns_map_type_info = new String[]{'http://soap.sforce.com/schemas/class/AccountService', 'soapSforceComSchemasClassAccountser'};
        public void AccountInsert(String accName,String ph) {
            soapSforceComSchemasClassAccountser.AccountInsert_element request_x = new soapSforceComSchemasClassAccountser.AccountInsert_element();
            request_x.accName = accName;
            request_x.ph = ph;
            soapSforceComSchemasClassAccountser.AccountInsertResponse_element response_x;
            Map<String, soapSforceComSchemasClassAccountser.AccountInsertResponse_element> response_map_x = new Map<String, soapSforceComSchemasClassAccountser.AccountInsertResponse_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/AccountService',
              'AccountInsert',
              'http://soap.sforce.com/schemas/class/AccountService',
              'AccountInsertResponse',
              'soapSforceComSchemasClassAccountser.AccountInsertResponse_element'}
            );
            response_x = response_map_x.get('response_x');
        }
    }
}


Write a WebServiceMock Class


global with sharing class MockClass 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) {
        
        soapSforceComSchemasClassAccountser.AccountInsertResponse_element objAC = new  soapSforceComSchemasClassAccountser.AccountInsertResponse_element();
        response.put('response_x',objAC); 
   } 
}


Test Class:

@isTest
private class soapSforceComSchemasClassAccountserTest {

    static testMethod void myUnitTest() {
        test.startTest();
            soapSforceComSchemasClassAccountser.LogInfo  objS1 = new soapSforceComSchemasClassAccountser.LogInfo();
            soapSforceComSchemasClassAccountser.AllowFieldTruncationHeader_element  objS2  = new soapSforceComSchemasClassAccountser.AllowFieldTruncationHeader_element();
            soapSforceComSchemasClassAccountser.DebuggingHeader_element objS3 = new soapSforceComSchemasClassAccountser.DebuggingHeader_element();
            soapSforceComSchemasClassAccountser.CallOptions_element objS4 = new soapSforceComSchemasClassAccountser.CallOptions_element();
            soapSforceComSchemasClassAccountser.AccountInsert_element  objS5 = new soapSforceComSchemasClassAccountser.AccountInsert_element();
            soapSforceComSchemasClassAccountser.location objS6 = new soapSforceComSchemasClassAccountser.location();
            soapSforceComSchemasClassAccountser.address objS7 = new soapSforceComSchemasClassAccountser.address();
            soapSforceComSchemasClassAccountser.SessionHeader_element  objS8 = new soapSforceComSchemasClassAccountser.SessionHeader_element();
            soapSforceComSchemasClassAccountser.AccountInsertResponse_element objS9 = new soapSforceComSchemasClassAccountser.AccountInsertResponse_element();
            soapSforceComSchemasClassAccountser.DebuggingInfo_element objS10 = new soapSforceComSchemasClassAccountser.DebuggingInfo_element();
           
            Test.setMock(WebServiceMock.class, new MockClass());
            soapSforceComSchemasClassAccountser.AccountService  objS11 = new soapSforceComSchemasClassAccountser.AccountService ();
            objS11.AccountInsert('test', '1234567890');
           
        test.stopTest();
    }
}

click on "Run Test" and check the code coverage of "soapSforceComSchemasClassAccountser".