You need to sign in to do that
Don't have an account?
AD1418
How to cover exception in test classes?
How to cover exception code in below class :- Below is apex class -
Below is test class. All is covered except exceptions.
public class CRM_ForecastCommentary { @AuraEnabled public static void saveLFCommentary(String liveForecastId , String comment){ CRM_Live_Forecast__c[] LFlst = new List<CRM_Live_Forecast__c>(); CRM_Live_Forecast__c FLtoUpdate; Id LFId = Id.valueOf(liveForecastId); try { insert LFlst; FLtoUpdate = [SELECT Name , Id , CRM_Comment__c FROM CRM_Live_Forecast__c WHERE Id =: LFId ]; // Update the comment. FLtoUpdate.CRM_Comment__c = comment; // Make the update call. update FLtoUpdate; } catch(DmlException e) { System.debug('An unexpected error has occurred: ' + e.getMessage()); // Verify that the comment s updated. CRM_Live_Forecast__c afterUpdate = [SELECT CRM_Comment__c FROM CRM_Live_Forecast__c WHERE Id =: LFId]; System.assertEquals(comment, afterUpdate.CRM_Comment__c); } } @AuraEnabled public static void saveCFCommentary(String commitForecastId , String comment){ CRM_Committed_Forecast__c[] CFlst = new List<CRM_Committed_Forecast__c>(); CRM_Committed_Forecast__c CFtoUpdate; Id CFId = Id.valueOf(commitForecastId); try { insert CFlst; CFtoUpdate = [SELECT Name , Id , CRM_Comment__c FROM CRM_Committed_Forecast__c WHERE Id =: CFId ]; // Update the comment. CFtoUpdate.CRM_Comment__c = comment; // Make the update call. update CFtoUpdate; } catch(DmlException e) { System.debug('An unexpected error has occurred: ' + e.getMessage()); // Verify that the comment s updated. CRM_Committed_Forecast__c afterUpdate = [SELECT CRM_Comment__c FROM CRM_Committed_Forecast__c WHERE Id =: CFId]; System.assertEquals(comment, afterUpdate.CRM_Comment__c); } } }
Below is test class. All is covered except exceptions.
@isTest public class CRM_ForecastCommentaryTest { static testmethod void testSaveLFCommentary(){ // insert forecast assignment test data CRM_Forecast_Assignment__c fassignment = new CRM_Forecast_Assignment__c(); fassignment.Name = 'test FA'; insert fassignment; system.assert(fassignment.Id != null); // insert Forecast period test data CRM_Forecast_Period__c fperiod = new CRM_Forecast_Period__c(); fperiod.Name = 'test forecast period'; fperiod.CRM_Fiscal_Year__c = '2020'; fperiod.CRM_Fiscal_Quarter__c = 'FY2020 Q1'; insert fperiod; system.assert(fperiod.Id != null); // create live forecast test data CRM_Live_Forecast__c liveForecast = new CRM_Live_Forecast__c(); liveForecast.CRM_Forecast_Assignment__c = fassignment.Id; liveForecast.CRM_Forecast_Period__c = fperiod.Id; liveForecast.CRM_Comment__c = 'test comment'; insert liveForecast; system.assert(liveForecast.Id != null); test.startTest(); CRM_ForecastCommentary.saveLFCommentary(liveForecast.Id, 'testcomment'); test.stopTest(); } static testmethod void testSaveCFCommentary(){ // insert forecast assignment test data CRM_Forecast_Assignment__c fassignment = new CRM_Forecast_Assignment__c(); fassignment.Name = 'test FA'; insert fassignment; system.assert(fassignment.Id != null); CRM_Committed_Forecast__c commitFA = new CRM_Committed_Forecast__c(); commitFA.CRM_Comment__c = 'Forecast Committed'; commitFA.CRM_Forecast_Assignment__c = fassignment.Id; try{ insert commitFA; system.assert(commitFA.Id != null); } catch(DmlException e){ system.assertEquals(e.getMessage(), e.getMessage()); } test.startTest(); CRM_ForecastCommentary.saveCFCommentary(commitFA.Id, commitFA.CRM_Comment__c ); test.stopTest(); } }
Greetings!
Please note that Not all code that is written can be covered. This is a fact of salesforce.com development. There is a reason why the deployment rule is 75% coverage, and not 100% coverage.
However,if you would like to cover the exception then you can try the sample code given in the below document:
https://developer.salesforce.com/forums/?id=9060G000000UY64QAG
Kindly let me know if it helps you and close your query by marking it as solved so that it can help others in the future.
Warm Regards,
Shirisha Pathuri
OR if you still want to cover it, for the sake of your own satisfaction or you want the coverage to be 100%. You simply need to generate the exception.
So in order to do so
I've made some changes to the code, Please try this & let me know if it worked.
So please add this method to your test class & try executing both methods.
I hope it covered the exception part as well. If it didn't work. Let me know the issue.
Regards,
Sachin
(:
Happy to Help!
Try passing long text in your second parameter (Comment) than what is expected. I mean, if your CRM_Comment__c length on CRM_Committed_Forecast__c object is 10. Pass a text that is longer than 10. It would throw an exception saying Data value is too large.
Hope this helps.
Thanks & Regards,
Archana
Pass the dummy Salesforce record id toliveForecastId and commitForecastId arguments then it will give the error message. Because you are Querying the CRM_Live_Forecast__c and CRM_Committed_Forecast__c records in the class and refering the CRM_Comment__c field from the record to update. So it will generate the List has no rows for assignment to SObject error and it will cover the Exception.
To cover the Exception lines in your class add one more test method. The Method should be like below:
@isTest
public class CRM_ForecastCommentaryTest {
Static testmethod void ExceptionsTestMethod(){
CRM_ForecastCommentary.saveLFCommentary('0010o00002iZjtQ', 'testcomment');
CRM_ForecastCommentary.saveCFCommentary('0010o00002iZjtQ', 'testcomment' );
}
}
Thanks,
Maharajan,C
Can you please tell me at which line number you are getting this exception in Class.
Thanks,
Maharajan.C