You need to sign in to do that
Don't have an account?
Trupti 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
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
MagulanDuraipandian
You have to try like this - http://www.infallibletechie.com/2015/11/test-class-to-cover-catch-block-in.html