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
swain 10swain 10 

Test Classes for apex facing error

public with sharing class expensesLineItem{
    public final Expense_Line_Item__c el;
    
    public expensesLineItem(ApexPages.StandardController stdController){
        this.el = (Expense_Line_Item__c)stdController.getRecord();
    }
    public PageReference Dismiss(){
        el.Display_Alert__c=false;
        update el;
        PageReference page = ApexPages.currentPage();
        page.setRedirect(true);
        return page;
    }
}


Test class:

@isTest
public class expensesLineItem_Test{
  @testSetup
  static void setupTestData()
  {
    Expense__c exp = new Expense__c();
    exp.Period_From__c = system.today();
    exp.Period_To__c =system.today();
    insert exp;
    System.assertNotEquals(null, exp.Id); 
    
    Expense_Line_Item__c expLine = new Expense_Line_Item__c();
    expLine.Name = exp.Id;
    expLine.Expense_Head__c='Food' ;
    expLine.Cost_Head__c= 'Campaign' ;
    expLine.Amount__c= 10000;
    System.assertNotEquals(null, expLine.Id);
    insert expLine;
 }
  
  @isTest 
  static void testCall()
  {
    Expense_Line_Item__c expLine  =  [SELECT Id,Name,Amount__c,Bill_Available__c,Cost_Head__c,Expense_Head__c,Expense__c from Expense_Line_Item__c][0];
   // System.assertEquals(true,expense_line_item_Obj.size()>0);
   // List<Expense__c> expense_Obj  =  [SELECT Id from Expense__c];
    //System.assertEquals(true,expense_Obj.size()>0);
    ApexPages.StandardController stdCon = new ApexPages.StandardController(expLine);
    expensesLineItem obj01 = new  expensesLineItem(stdCon);
    
    //expensesLineItem obj01 = new expensesLineItem(new ApexPages.StandardController(expense_line_item_Obj[0]));
    obj01.Dismiss();
  }
}
Best Answer chosen by swain 10
GulshanRajGulshanRaj
Hi Swain,

This is because of assert statement should after insert (I also missed that part):
static void setupTestData()
  {
    Expense__c exp = new Expense__c();
    exp.Period_From__c = system.today();
    exp.Period_To__c =system.today();
    insert exp;
    System.assertNotEquals(null, exp.Id); 
    
    Expense_Line_Item__c expLine = new Expense_Line_Item__c();
    expLine.Expense__c = exp.Id;
    expLine.Expense_Head__c='Food' ;
    expLine.Cost_Head__c= 'Campaign' ;
    expLine.Amount__c= 10000;
    insert expLine;
    System.assertNotEquals(null, expLine.Id);
 }

This will work.

Thanks
Gulshan Raj
 

All Answers

GulshanRajGulshanRaj
Hi @swain,

I think you are missing to fill  Expense__c for Expense_Line_Item__c in setupTestData.

I have changed your code to point the correct lookup (or master) relation value:
public with sharing class expensesLineItem{
    public final Expense_Line_Item__c el;
    
    public expensesLineItem(ApexPages.StandardController stdController){
        this.el = (Expense_Line_Item__c)stdController.getRecord();
    }
    public PageReference Dismiss(){
        el.Display_Alert__c=false;
        update el;
        PageReference page = ApexPages.currentPage();
        page.setRedirect(true);
        return page;
    }
}


Test class:

@isTest
public class expensesLineItem_Test{
  @testSetup
  static void setupTestData()
  {
    Expense__c exp = new Expense__c();
    exp.Period_From__c = system.today();
    exp.Period_To__c =system.today();
    insert exp;
    System.assertNotEquals(null, exp.Id); 
    
    Expense_Line_Item__c expLine = new Expense_Line_Item__c();
    expLine.Expense__c = exp.Id;
    expLine.Expense_Head__c='Food' ;
    expLine.Cost_Head__c= 'Campaign' ;
    expLine.Amount__c= 10000;
    System.assertNotEquals(null, expLine.Id);
    insert expLine;
 }
  
  @isTest 
  static void testCall()
  {
    Expense_Line_Item__c expLine  =  [SELECT Id,Name,Amount__c,Bill_Available__c,Cost_Head__c,Expense_Head__c,Expense__c from Expense_Line_Item__c][0];
   // System.assertEquals(true,expense_line_item_Obj.size()>0);
   // List<Expense__c> expense_Obj  =  [SELECT Id from Expense__c];
    //System.assertEquals(true,expense_Obj.size()>0);
    ApexPages.StandardController stdCon = new ApexPages.StandardController(expLine);
    expensesLineItem obj01 = new  expensesLineItem(stdCon);
    
    //expensesLineItem obj01 = new expensesLineItem(new ApexPages.StandardController(expense_line_item_Obj[0]));
    obj01.Dismiss();
  }
}

Please let me know if you have any question.

Thanks & Regards
Gulshan Raj
LinkedIn (https://www.linkedin.com/in/gulshan-raj-a26b0640/)
Twitter (https://twitter.com/gulshan_bittoo)
swain 10swain 10
Hi Gulshan,
 Still Its failing , It seems like your code is completely same as mine .I could not got where I had done mistake . Please review it if possible.
Thank you
Amit Chaudhary 8Amit Chaudhary 8
NOTE:- it look like you forget to insert Expense__c (Expense lookup/master detail ) field on Expense_Line_Item__c object.
Expense_Line_Item__c expLine = new Expense_Line_Item__c();
		expLine.Expense__c = exp.Id; // Please update parent record Loopup/MasterDetail

Let us know if this will help you

Please try to update your code like below
@isTest
public class expensesLineItem_Test
{
	@isTest 
	static void testCall()
	{
		Expense__c exp = new Expense__c();
		exp.Period_From__c = system.today();
		exp.Period_To__c =system.today();
		insert exp;
		System.assertNotEquals(null, exp.Id); 

		Expense_Line_Item__c expLine = new Expense_Line_Item__c();
		expLine.Expense__c = exp.Id; // Please update parent record Loopup/MasterDetail
		expLine.Name = exp.Id;
		expLine.Expense_Head__c='Food' ;
		expLine.Cost_Head__c= 'Campaign' ;
		expLine.Amount__c= 10000;
		System.assertNotEquals(null, expLine.Id);
		insert expLine;

	
		ApexPages.StandardController stdCon = new ApexPages.StandardController(expLine);
		expensesLineItem obj01 = new  expensesLineItem(stdCon);
		obj01.Dismiss();
	}
}

 
GulshanRajGulshanRaj
Hi swain,

The only change which you have to do is in:
expLine.Expense__c = exp.Id;

Replace your setupTestData method with this
static void setupTestData()
  {
    Expense__c exp = new Expense__c();
    exp.Period_From__c = system.today();
    exp.Period_To__c =system.today();
    insert exp;
    System.assertNotEquals(null, exp.Id); 
    
    Expense_Line_Item__c expLine = new Expense_Line_Item__c();
    expLine.Expense__c = exp.Id;
    expLine.Expense_Head__c='Food' ;
    expLine.Cost_Head__c= 'Campaign' ;
    expLine.Amount__c= 10000;
    System.assertNotEquals(null, expLine.Id);
    insert expLine;
 }

If still facing issue, please provide error message. I will provide you fix.


Thanks
Gulshan Raj
 
swain 10swain 10
Hey Gulshan,
Error MessageSystem.AssertException: Assertion Failed: Same value: null
Stack TraceClass.expensesLineItem_Test.setupTestData: line 18, column 1

this is the error message
GulshanRajGulshanRaj
Hi Swain,

This is because of assert statement should after insert (I also missed that part):
static void setupTestData()
  {
    Expense__c exp = new Expense__c();
    exp.Period_From__c = system.today();
    exp.Period_To__c =system.today();
    insert exp;
    System.assertNotEquals(null, exp.Id); 
    
    Expense_Line_Item__c expLine = new Expense_Line_Item__c();
    expLine.Expense__c = exp.Id;
    expLine.Expense_Head__c='Food' ;
    expLine.Cost_Head__c= 'Campaign' ;
    expLine.Amount__c= 10000;
    insert expLine;
    System.assertNotEquals(null, expLine.Id);
 }

This will work.

Thanks
Gulshan Raj
 
This was selected as the best answer
swain 10swain 10
Thank you so much GulshanRaj