function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
lavanya gottumukkalalavanya gottumukkala 

How to cover webservice.invoke method(managed) in test classes

Hi All,

I have below wsdl2 generated code.

public S3.Status DeleteObject(String Bucket,String Key,String AWSAccessKeyId,DateTime Timestamp,String Signature,String Credential)
{
S3.DeleteObject_element request_x = new S3.DeleteObject_element();
S3.DeleteObjectResponse_element response_x;
request_x.Bucket = Bucket;
request_x.Key = Key;
request_x.AWSAccessKeyId = AWSAccessKeyId;
request_x.Timestamp = Timestamp;
request_x.Signature = Signature;
request_x.Credential = Credential;
Map<String, S3.DeleteObjectResponse_element> response_map_x = new Map<String, S3.DeleteObjectResponse_element>(); response_map_x.put('response_x', response_x);
WebServiceCallout.invoke( this, request_x, response_map_x, new String[]{endpoint_x, '', 'http://s3.amazonaws.com/doc/2006-03-01/', 'DeleteObject', 'http://s3.amazonaws.com/doc/2006-03-01/', 'DeleteObjectResponse', 'S3.DeleteObjectResponse_element'} );
response_x = response_map_x.get('response_x');
return response_x.DeleteObjectResponse;
}

The Webservice.invoke method covered in test class in developer org,but not covered in packaging orgs.
How can I cover that method in packaging org also?
 
EnreecoEnreeco
Hi Lavanya,
refer to this document to test custom webservice callouts
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_callouts_wsdl2apex_testing.htm
You have to implement a Mock test class that simulates the remote webserver in the test class.

Hope this helps

May the Force.com be with you!
lavanya gottumukkalalavanya gottumukkala
Hi i have below code and bolded part i am unable to cover in test class in managed package.It is covered in develoer org.How to cover that part in test class?Can anyone help?
It's urgent.Thanks in advance.

public dto16ApiEchosign.EmbeddedWidgetCreationResult createEmbeddedWidget(String apiKey,dtoApiEchosign.SenderInfo senderInfo,dto8ApiEchosign.WidgetCreationInfo widgetInfo) {             apiEchosign.createEmbeddedWidget_element request_x = new apiEchosign.createEmbeddedWidget_element();             request_x.apiKey = apiKey;             
            request_x.senderInfo = senderInfo;            
            request_x.widgetInfo = widgetInfo;             
           apiEchosign.createEmbeddedWidgetResponse_element response_x;             Map<String, apiEchosign.createEmbeddedWidgetResponse_element> response_map_x = new Map<String, apiEchosign.createEmbeddedWidgetResponse_element>();             
response_map_x.put('response_x', response_x);            
If(!Test.isRunningTest())             
{             
WebServiceCallout.invoke(               
this,               
request_x,               
response_map_x,               
new String[]{endpoint_x,               '',               'http://api.echosign',               'createEmbeddedWidget',               'http://api.echosign',               'createEmbeddedWidgetResponse',               'apiEchosign.createEmbeddedWidgetResponse_element'}             );            
 }             

response_x = response_map_x.get('response_x');             
if(response_x!=null)             
return response_x.embeddedWidgetCreationResult;             
else return null;                     
}
EnreecoEnreeco
The bolded part should be tested using a Mock callout simulator as describe in the article I've linked in the previous post

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_callouts_wsdl2apex_testing.htm

I'll try to setup the test code as your needs.

This is an example of the Mock class:
@isTest
global class WebServiceMockImpl 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) {
       

apiEchosign.createEmbeddedWidgetResponse_element respElement = new apiEchosign.createEmbeddedWidgetResponse_element();
       //add all fields you need in the respElement mock response object (it seem you need to populate the "
embeddedWidgetCreationResult" member)
       response.put('response_x', respElement); 
   }
}

And this is how it have to be called from withing test class:
@isTest
private class WebSvcCalloutTest {
    @isTest static void testEchoString() {              
        // This causes a fake response to be generated
        Test.setMock(WebServiceMock.class, new WebServiceMockImpl());
        
        // Call the method that invokes a callout
        Stub.createEmbeddedWidget(...);

    }
}