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
Trupti Vispute 5Trupti Vispute 5 

How to handle without catch thrown exception in testclass,

Hi all,
I am having controller class for cascade delete of an looked up object,whic is just throwing an exception not catching it,
but in test class i am not able to catch the exception,the after testclass run exception has occured!Plz help me i need the solution today itself

My code is:(Controller class)

public class RMProjectBeforeDeleteHandler{
    public void DeleteAllRelatedBudgetReuest(List<RM_Project__c> ProjectList){
        
            FLSValidation();
        
        set<Id> setOfProjectIds = new set<Id>() ;
     
        for(RM_Project__c Project:ProjectList){
            setOfProjectIds .add(Project.Id) ;
            system.debug(setOfProjectIds );
        }
     
        if(!setOfProjectIds .isEmpty()){
            List<RM_Budget_Request__c> BudgetReuest=[SELECT Id from RM_Budget_Request__c WHERE RM_Project__c IN: setOfProjectIds ] ;
            System.debug(BudgetReuest);
            List<RM_Budget__c> Budget=[SELECT Id from RM_Budget__c WHERE RM_Project__c IN: setOfProjectIds ] ;     
            if (RM_Budget__c.sObjectType.getDescribe().isDeletable()){
            delete (Budget); 
            }
            else{
                throw new DMLException('You Dont Have Delete Access; Exception For RM Budget :');
            }
            if (RM_Budget_Request__c.sObjectType.getDescribe().isDeletable()){
            delete (BudgetReuest); 
            }
             else{
                throw new DMLException('You Dont Have Delete Access; Exception For RM Budget Request :');
            }
        }
    }
    
    public static void FLSValidation(){
        Set<String> rmBudgetRequestFields = new Set<String> {'RM_Project__c'};
        Set<String> rmBudgetFields = new Set<String> {'name','RM_Project__c'};
        
        Map<String,Schema.SObjectField> rmBudgetRequestFieldsDesc = Schema.SObjectType.RM_Budget_Request__c.fields.getMap();
        Map<String,Schema.SObjectField> rmBudgetFieldsDesc = Schema.SObjectType.RM_Budget__c.fields.getMap();
        
        for (String fieldToCheck : rmBudgetRequestFields) {
            // Check if the user has access to view field
            if (!rmBudgetRequestFieldsDesc.get(fieldToCheck).getDescribe().isAccessible()) {
                // Pass error to client
                throw new FLSException('FLSException For RM Project:'+fieldToCheck);
            }
        }
        
        for (String fieldToCheck : rmBudgetFields) {
            // Check if the user has access to view field
            if (!rmBudgetFieldsDesc.get(fieldToCheck).getDescribe().isAccessible()) {
                // Pass error to client
                throw new FLSException('FLSException For RM Program:'+fieldToCheck);
            }
        }
     }
}

Testclass:
@isTest
    static void testFLSS() {
         RM_Fund__c fundFLS=new RM_Fund__c();
        fundFLS.name='Test Fundfls';
        fundFLS.Initial_Amount__c=100000;
        fundFLS.Allocated__c=100000;
        fundFLS.Available__c=100000;
        fundFLS.Status__c='Approved';
        insert fundFLS;
        
        RM_Program__c programFLS=new RM_Program__c();
        programFLS.name='Test Program2fls';
        programFLS.Status__c='Active';
        programFLS.RM_Fund__c=fundFLS.id;
        insert programFLS;
        
        RM_Project__c projectFLS=new RM_Project__c();
        projectFLS.name='Test Project2fls';
        projectFLS.Project_Code__c='Project2';
        projectFLS.Status__c='Approved';
        projectFLS.RM_Program__c=programFLS.id;
        insert projectFLS;
        // Observed bizarre behavior: if first call is false rest will be false
        User RO=readOnlyUser();
        System.runAs(RO) {
          Exception ex;
      
         test.startTest(); 
        try {
        System.Debug('Hi inside try block');
        Delete projectFLS;
        System.assert(false, 'FLSException');
        } catch (Exception e) {
         System.Debug('Hi inside Catch block');
        //System.assert(false, 'Exception ' + e);
        System.assert(e.getMessage().contains('FLSException For RM Project:RM_Project__c'), + e.getMessage());
        }
        test.stopTest();
        
        
        }
      }

Exception is:-
 FATAL_ERROR FLSException: FLSException For RM Project:RM_Project__c
 
MagulanDuraipandianMagulanDuraipandian
You have to try like this - http://www.infallibletechie.com/2015/11/test-class-to-cover-catch-block-in.html