You need to sign in to do that
Don't have an account?
Krista Kelly
Test class for External call out
I have a Batch class below (also a scheduled class). I am trying to write the test class using a HTTPCalloutMock but am really struggling). Example I'm trying to follow below but I don't have an getInfoFromExternalService() in MyBatchClass. https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restful_http_testing_httpcalloutmock.htm Any advice would be appreciated. Thank you. global class MyBatchClass implements Database.Batchable<sObject>,Database.AllowsCallouts, Database.Stateful { global Database.QueryLocator start(Database.BatchableContext bc) { System.debug('START METHOD'); String Query= 'SELECT salesforceid__c,Id, number_of_services_in_use__c FROM Account WHERE salesforceid__c != null'; return Database.getQueryLocator(Query); } global void execute(Database.BatchableContext bc, List<Account> records){ System.debug('EXECUTE METHOD'); // process each batch of records String Token ='eyJhbGciOiJSUzI1NiIsImtpZCI6Im1hYXNfcHJvZF8yMDIwMDMyNiIsInR5cCI6IkpXVCJ9.eyJvcmciOiJzYWxlc2ZvcmNlIiwib3JnVHlwZSI6IkVOVEVSUFJJU0UiLCJzdWIiOiJyd3Jqdzl2ZHU2cCIsInBlcm1pc3Npb25zIjoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBPSIsImFwaVRva2VuSWQiOiJqZW44bjN3aGthciIsImlzcyI6IlNvbGFjZSBDb3Jwb3JhdGlvbiIsImlhdCI6MTU5ODI5MDg3N30.FPfTJFwPfhW3qrEMCcjcfNj-SO8IDMo7MiurTqFcTu2GIStNAjVcjFHD1ESS_3Feo95n6Se_u7ifyee3uLwTTZJknskFn9FB-1ZCFzo0jRKz6TigIzc7WEpFPvbZt4L_MmvLa7eSqM5ovewt9nAtQ1ttJFm7a_35lMsLQu5Bf3f-WbuCjE-POzFnBWASQetCj63TAdgkYu1wNPqZmavJESLlg6Wv6oWf2H5HI_m9fW7Vt2TypQuhIz0Q25iFQoYPKWmseDxU-EUQIwJ1tSqYSuyDNWpFDhEqwTAyBLz4cu-8a-m29caaeG0eIWxIydcMmxq68THY4KTn9Rtmxy_Yug'; // Initiating the http request Http http1 = new http(); HttpRequest request = new HttpRequest(); // Adding the paramters for the request request.setTimeout(120000); request.setEndpoint('https://solace.cloud/api/v0/analytics/organizations'); request.setMethod('GET'); request.setHeader('Authorization', 'Bearer '+Token); Httpresponse response1 = http1.send(request); system.debug('Data response= '+response1.getBody()); //create a list so we do one insert for all the Metrics records List<Cloud_Usage_Metrics__c> newMetrics = new List<Cloud_Usage_Metrics__c>(); // Logic to map and update the account object if (response1.getStatusCode() == 200) { // Deserialize the JSON string into collections of primitive data types. Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response1.getBody()); // Cast the values in the 'accountCloudMetrics' key as a list List<Object> data = (List<Object>) results.get('data'); System.debug('Received the following metrics:'); for (Object metric: data) { Map<String, Object> i = (Map<String, Object>)metric; System.debug(i.get('salesforceId')); for(Account a: records){ if (a.salesforceid__c == i.get('salesforceId')) { Cloud_Usage_Metrics__c met = new Cloud_Usage_Metrics__c( Metric_Name__c='NumberOfMessages', Metric_Date__c=system.today(), Metric_Value__c=Integer.valueOf(i.get('brokerMessageCount')), Account__c=a.id); newMetrics.add(met); } } //insert newMetrics(met); } } else { System.debug('Callout failed: ' + response1); } insert newMetrics; update records; } global void finish(Database.BatchableContext bc){ } }
Can you try checking the below implementation that could help you as a reference to write a test class for your use case.
>> https://salesforce.stackexchange.com/questions/244797/how-do-i-unit-test-code-that-includes-a-callout
Regards,
Anutej