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
HNT_NeoHNT_Neo 

Apex Error on test

I'm attempting to create an APEX test class with the below syntax but receive the error shown in the image.
 
@isTest
public class TestCAPdataTiers {
    static testMethod void insertNewCAPdata() {
    
        CAPdata__c capdataToCreate = new CAPdata__c();
        
        capdataToCreate.Business_Review_Form_Owner__c = '005d0000002vay0';
        capdataToCreate.TierElitePreferredJobs__c = 36;
        capdataToCreate.Points__c = 100000;
        capdataToCreate.Account__r.Volume_Market__c = 'A';
    
        insert capdataToCreate;
        }
}

User-added image
This is my APEX Trigger shown below. Any help to resolve is appreciated. 

Thanks!
 
trigger CAPdataTiers on CAPdata__c (before insert,before update) {
    for (CAPdata__c CAP : Trigger.new) {
        if(CAP.Volume_Market__c.equalsIgnoreCase('A') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Midwest'))
        {
            CAP.TierElitePreferredJobs__c = 36; 
            CAP.TierElitePreferredRV__c = 90000;
            CAP.TierElitePreferredL6MosTA__c = 90;
            CAP.TierElitePreferredL6MosDA__c = 90;
            CAP.TierPreferredJobs__c = 24; 
            CAP.TierPreferredRV__c = 60000;
            CAP.TierPreferredL6MosTA__c = 75;
            CAP.TierRewardsAdvantageJobs__c = 12;
            CAP.TierRewardsAdvantageRV__c = 30000;
            CAP.TierRewardsAdvantageL6MosTA__c = 75;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('B') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Midwest'))
        {
            CAP.TierElitePreferredJobs__c = 18; 
            CAP.TierElitePreferredRV__c = 45000;
            CAP.TierElitePreferredL6MosTA__c = 90;
            CAP.TierElitePreferredL6MosDA__c = 90;
            CAP.TierPreferredJobs__c = 12; 
            CAP.TierPreferredRV__c = 30000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 6;
            CAP.TierRewardsAdvantageRV__c = 15000;
            CAP.TierRewardsAdvantageL6MosTA__c = 25;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('A') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Northeast'))
        {
            CAP.TierElitePreferredJobs__c = 36; 
            CAP.TierElitePreferredRV__c = 90000;
            CAP.TierElitePreferredL6MosTA__c = 75;
            CAP.TierElitePreferredL6MosDA__c = 90;
            CAP.TierPreferredJobs__c = 24; 
            CAP.TierPreferredRV__c = 60000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 12;
            CAP.TierRewardsAdvantageRV__c = 30000;
            CAP.TierRewardsAdvantageL6MosTA__c = 50;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('B') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Northeast'))
        {
            CAP.TierElitePreferredJobs__c = 18; 
            CAP.TierElitePreferredRV__c = 45000;
            CAP.TierElitePreferredL6MosTA__c = 75;
            CAP.TierElitePreferredL6MosDA__c = 90;
            CAP.TierPreferredJobs__c = 12; 
            CAP.TierPreferredRV__c = 30000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 6;
            CAP.TierRewardsAdvantageRV__c = 15000;
            CAP.TierRewardsAdvantageL6MosTA__c = 25;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('A') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Pacific Northwest'))
        {
            CAP.TierElitePreferredJobs__c = 36; 
            CAP.TierElitePreferredRV__c = 90000;
            CAP.TierElitePreferredL6MosTA__c = 75;
            CAP.TierElitePreferredL6MosDA__c = 50;
            CAP.TierPreferredJobs__c = 24; 
            CAP.TierPreferredRV__c = 60000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 12;
            CAP.TierRewardsAdvantageRV__c = 30000;
            CAP.TierRewardsAdvantageL6MosTA__c = 50;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('B') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Pacific Northwest'))
        {
            CAP.TierElitePreferredJobs__c = 18; 
            CAP.TierElitePreferredRV__c = 45000;
            CAP.TierElitePreferredL6MosTA__c = 75;
            CAP.TierElitePreferredL6MosDA__c = 50;
            CAP.TierPreferredJobs__c = 12; 
            CAP.TierPreferredRV__c = 30000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 6;
            CAP.TierRewardsAdvantageRV__c = 15000;
            CAP.TierRewardsAdvantageL6MosTA__c = 50;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('A') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('South/West'))
        {
            CAP.TierElitePreferredJobs__c = 36; 
            CAP.TierElitePreferredRV__c = 90000;
            CAP.TierElitePreferredL6MosTA__c = 90;
            CAP.TierElitePreferredL6MosDA__c = 50;
            CAP.TierPreferredJobs__c = 24; 
            CAP.TierPreferredRV__c = 60000;
            CAP.TierPreferredL6MosTA__c = 75;
            CAP.TierRewardsAdvantageJobs__c = 12;
            CAP.TierRewardsAdvantageRV__c = 30000;
            CAP.TierRewardsAdvantageL6MosTA__c = 75;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('B') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('South/West'))
        {
            CAP.TierElitePreferredJobs__c = 18; 
            CAP.TierElitePreferredRV__c = 45000;
            CAP.TierElitePreferredL6MosTA__c = 90;
            CAP.TierElitePreferredL6MosDA__c = 50;
            CAP.TierPreferredJobs__c = 12; 
            CAP.TierPreferredRV__c = 30000;
            CAP.TierPreferredL6MosTA__c = 75;
            CAP.TierRewardsAdvantageJobs__c = 6;
            CAP.TierRewardsAdvantageRV__c = 15000;
            CAP.TierRewardsAdvantageL6MosTA__c = 75;
        }
    }
}

 
Best Answer chosen by HNT_Neo
Head In CloudHead In Cloud
This is related to this field "Region_Program_Requirements__c".
You need to add a null check in your trigger line number 4 for this.
like this:
CAP.Region_Program_Requirements__c != null && CAP.Region_Program_Requirements__c.equalsIgnoreCase('Midwest'))

Also, to cover your trigger, you need to add this field in your test class.
This is the updated test class you can use:
@isTest
public class TestCAPdataTiers {
    static testMethod void insertNewCAPdata() {
        Account acc = new account();
        acc.name = 'test';
        acc.Volume_Market__c = 'A';
        insert acc;
    
        CAPdata__c capdataToCreate = new CAPdata__c();
        
        capdataToCreate.Business_Review_Form_Owner__c = '005P0000001AFhj';
        capdataToCreate.TierElitePreferredJobs__c = 36;
        capdataToCreate.Points__c = 100000;
        capdataToCreate.Account__c = acc.id;
        capdataToCreate.Region_Program_Requirements__c = 'Midwest';
        insert capdataToCreate;
        }
}

Please mark as best answer if it solves your issue. And let me know if you have any queries. Thanks

All Answers

Martijn SchwarzerMartijn Schwarzer
Hi JH_Neo,

First of all you should know that by default your Apex Test code does not have access to (most of) the data in the org. You will have to create that data yourself in your test class.

So in line 10 of your test class you try to set a value on a related Account record. But that Account record does not exist yet. You will first have to create an Account record, attach it to your CAPdata__c record and then try to set the value as you do in line 10.

It looks like this:
 
@isTest
public class TestCAPdataTiers {
    static testMethod void insertNewCAPdata() {

        Account a = new Account(Name = 'My Test Account');
        insert a;

        CAPdata__c capdataToCreate = new CAPdata__c();
        
        capdataToCreate.Business_Review_Form_Owner__c = '005d0000002vay0';
        capdataToCreate.TierElitePreferredJobs__c = 36;
        capdataToCreate.Points__c = 100000;
        capdataToCreate.Account = a.Id;
        capdataToCreate.Account__r.Volume_Market__c = 'A';

        insert capdataToCreate;
    }
}

Also, please try to avoid hardcoding ID's in your (test)code. It's better to create a user in your test class and use the ID of that user.

Hope this helps!

Best regards,
Martijn Schwärzer
Head In CloudHead In Cloud
Hi,

You can try the below code:
@isTest
public class TestCAPdataTiers {
    static testMethod void insertNewCAPdata() {
        Account acc = new account();
        acc.name = 'test';
        acc.Volume_Market__c = 'A';
        insert acc; 

        CAPdata__c capdataToCreate = new CAPdata__c();
        
        capdataToCreate.Business_Review_Form_Owner__c = '005d0000002vay0';
        capdataToCreate.TierElitePreferredJobs__c = 36;
        capdataToCreate.Points__c = 100000;
        capdataToCreate.Account__c = acc.id;
    
        insert capdataToCreate;
        }
}

 
HNT_NeoHNT_Neo
@Martijn, received this error message:  Error: Compile Error: Invalid field Account for SObject CAPdata__c at line 13 column 9

here is my apex class syntax with updates recommended: 
@isTest
public class TestCAPdataTiers {
    static testMethod void insertNewCAPdata() {
    
        Account a = new Account(Name = 'PremierToElitePremier');
        insert a;
    
        CAPdata__c capdataToCreate = new CAPdata__c();
        
        capdataToCreate.Business_Review_Form_Owner__c = '005P0000001AFhj';
        capdataToCreate.TierElitePreferredJobs__c = 36;
        capdataToCreate.Points__c = 100000;
        capdataToCreate.Account = a.Id;
        capdataToCreate.Account__r.Volume_Market__c = 'A';
    
        insert capdataToCreate;
        }
}
Let me know where I went wrong. 
 
HNT_NeoHNT_Neo

@Head In Cloud

I ran your apex class syntax recommendation but when i ran the test it came up with this error, any ideas on what it could be? 

User-added image
This is the apex class syntax i used per your recommendations: 

 

@isTest
public class TestCAPdataTiers {
    static testMethod void insertNewCAPdata() {
        Account acc = new account();
        acc.name = 'test';
        acc.Volume_Market__c = 'A';
        insert acc;
    
        CAPdata__c capdataToCreate = new CAPdata__c();
        
        capdataToCreate.Business_Review_Form_Owner__c = '005P0000001AFhj';
        capdataToCreate.TierElitePreferredJobs__c = 36;
        capdataToCreate.Points__c = 100000;
        capdataToCreate.Account__c = acc.id;
    
        insert capdataToCreate;
        }
}
Head In CloudHead In Cloud
This is related to this field "Region_Program_Requirements__c".
You need to add a null check in your trigger line number 4 for this.
like this:
CAP.Region_Program_Requirements__c != null && CAP.Region_Program_Requirements__c.equalsIgnoreCase('Midwest'))

Also, to cover your trigger, you need to add this field in your test class.
This is the updated test class you can use:
@isTest
public class TestCAPdataTiers {
    static testMethod void insertNewCAPdata() {
        Account acc = new account();
        acc.name = 'test';
        acc.Volume_Market__c = 'A';
        insert acc;
    
        CAPdata__c capdataToCreate = new CAPdata__c();
        
        capdataToCreate.Business_Review_Form_Owner__c = '005P0000001AFhj';
        capdataToCreate.TierElitePreferredJobs__c = 36;
        capdataToCreate.Points__c = 100000;
        capdataToCreate.Account__c = acc.id;
        capdataToCreate.Region_Program_Requirements__c = 'Midwest';
        insert capdataToCreate;
        }
}

Please mark as best answer if it solves your issue. And let me know if you have any queries. Thanks
This was selected as the best answer
Head In CloudHead In Cloud
Just remove the line from the test class. Didn't know that this was a formula field.
capdataToCreate.Region_Program_Requirements__c = 'Midwest';

 
HNT_NeoHNT_Neo
@Head In Cloud

Received this error:

Error: Compile Error: Field is not writeable: CAPdata__c.Region_Program_Requirements__c at line 15 column 9


The Region_Program_Requirements__c is a CASE formula field I created. It pulls in the Auto_Region_F__c formula field information as well. The Auto_Region_F__c formula field syntax is this: TEXT (Account__r.Auto_Region__c) [just in case you needed to know that the information is linked to the Account object].

The CASE formula for Region_Program_Requirements__c looks like this: 
 
CASE(Auto_Region_F__c, 
"Midwest-East", "Midwest", 
"Midwest-West", "Midwest", 
"Midwest", "Midwest", 
"Mountain", "Midwest", 
"Carolinas", "Northeast", 
"Mid-Atlantic", "Northeast", 
"Northeast", "Northeast", 
"Canada", "Pacific Northwest", 
"Pacific Northwest", "Pacific Northwest", 
"National", "Pacific Northwest"/* Canada */, 
"Southwest", "South/West", 
"Mid South", "South/West", 
"South Central", "South/West", 
"Southeast", "South/West", 
"")


This is the latest APEX trigger syntax per your recommendations: 
 
@isTest
public class TestCAPdataTiers {
    static testMethod void insertNewCAPdata() {
        Account acc = new account();
        acc.name = 'test';
        acc.Volume_Market__c = 'A';
        insert acc;
    
        CAPdata__c capdataToCreate = new CAPdata__c();
        
        capdataToCreate.Business_Review_Form_Owner__c = '005P0000001AFhj';
        capdataToCreate.TierElitePreferredJobs__c = 36;
        capdataToCreate.Points__c = 100000;
        capdataToCreate.Account__c = acc.id;
        capdataToCreate.Region_Program_Requirements__c = 'Midwest'; 

        insert capdataToCreate;
        }
}

and this is the latest APEX Trigger with recommendated updates but I'm not sure if I need to place this syntax at every IF statement I created below : CAP.Region_Program_Requirements__c != null && CAP.Region_Program_Requirements__c.equalsIgnoreCase('Midwest'))
 
trigger CAPdataTiers on CAPdata__c (before insert,before update) {
    for (CAPdata__c CAP : Trigger.new) {
        if(CAP.Volume_Market__c.equalsIgnoreCase('A') && 
           CAP.Region_Program_Requirements__c != null && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Midwest'))
        {    //Midwest Market A
            CAP.TierElitePreferredJobs__c = 36; 
            CAP.TierElitePreferredRV__c = 90000;
            CAP.TierElitePreferredL6MosTA__c = 90;
            CAP.TierElitePreferredL6MosDA__c = 90;
            CAP.TierPreferredJobs__c = 24; 
            CAP.TierPreferredRV__c = 60000;
            CAP.TierPreferredL6MosTA__c = 75;
            CAP.TierRewardsAdvantageJobs__c = 12;
            CAP.TierRewardsAdvantageRV__c = 30000;
            CAP.TierRewardsAdvantageL6MosTA__c = 75;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('B') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Midwest'))
        {    //Midwest Market B
            CAP.TierElitePreferredJobs__c = 18; 
            CAP.TierElitePreferredRV__c = 45000;
            CAP.TierElitePreferredL6MosTA__c = 90;
            CAP.TierElitePreferredL6MosDA__c = 90;
            CAP.TierPreferredJobs__c = 12; 
            CAP.TierPreferredRV__c = 30000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 6;
            CAP.TierRewardsAdvantageRV__c = 15000;
            CAP.TierRewardsAdvantageL6MosTA__c = 25;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('A') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Northeast'))
        {    //Northeast Market A
            CAP.TierElitePreferredJobs__c = 36; 
            CAP.TierElitePreferredRV__c = 90000;
            CAP.TierElitePreferredL6MosTA__c = 75;
            CAP.TierElitePreferredL6MosDA__c = 90;
            CAP.TierPreferredJobs__c = 24; 
            CAP.TierPreferredRV__c = 60000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 12;
            CAP.TierRewardsAdvantageRV__c = 30000;
            CAP.TierRewardsAdvantageL6MosTA__c = 50;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('B') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Northeast'))
        {    //Northeast Market B
            CAP.TierElitePreferredJobs__c = 18; 
            CAP.TierElitePreferredRV__c = 45000;
            CAP.TierElitePreferredL6MosTA__c = 75;
            CAP.TierElitePreferredL6MosDA__c = 90;
            CAP.TierPreferredJobs__c = 12; 
            CAP.TierPreferredRV__c = 30000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 6;
            CAP.TierRewardsAdvantageRV__c = 15000;
            CAP.TierRewardsAdvantageL6MosTA__c = 25;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('A') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Pacific Northwest'))
        {   //Pacific Northwest Market A
            CAP.TierElitePreferredJobs__c = 36; 
            CAP.TierElitePreferredRV__c = 90000;
            CAP.TierElitePreferredL6MosTA__c = 75;
            CAP.TierElitePreferredL6MosDA__c = 50;
            CAP.TierPreferredJobs__c = 24; 
            CAP.TierPreferredRV__c = 60000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 12;
            CAP.TierRewardsAdvantageRV__c = 30000;
            CAP.TierRewardsAdvantageL6MosTA__c = 50;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('B') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('Pacific Northwest'))
        {    //Pacific Northwest Market B
            CAP.TierElitePreferredJobs__c = 18; 
            CAP.TierElitePreferredRV__c = 45000;
            CAP.TierElitePreferredL6MosTA__c = 75;
            CAP.TierElitePreferredL6MosDA__c = 50;
            CAP.TierPreferredJobs__c = 12; 
            CAP.TierPreferredRV__c = 30000;
            CAP.TierPreferredL6MosTA__c = 50;
            CAP.TierRewardsAdvantageJobs__c = 6;
            CAP.TierRewardsAdvantageRV__c = 15000;
            CAP.TierRewardsAdvantageL6MosTA__c = 50;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('A') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('South/West'))
        {   //South/West Market A
            CAP.TierElitePreferredJobs__c = 36; 
            CAP.TierElitePreferredRV__c = 90000;
            CAP.TierElitePreferredL6MosTA__c = 90;
            CAP.TierElitePreferredL6MosDA__c = 50;
            CAP.TierPreferredJobs__c = 24; 
            CAP.TierPreferredRV__c = 60000;
            CAP.TierPreferredL6MosTA__c = 75;
            CAP.TierRewardsAdvantageJobs__c = 12;
            CAP.TierRewardsAdvantageRV__c = 30000;
            CAP.TierRewardsAdvantageL6MosTA__c = 75;
        }
        else if(CAP.Volume_Market__c.equalsIgnoreCase('B') && 
           CAP.Region_Program_Requirements__c.equalsIgnoreCase('South/West'))
        {    //South/West Market B
            CAP.TierElitePreferredJobs__c = 18; 
            CAP.TierElitePreferredRV__c = 45000;
            CAP.TierElitePreferredL6MosTA__c = 90;
            CAP.TierElitePreferredL6MosDA__c = 50;
            CAP.TierPreferredJobs__c = 12; 
            CAP.TierPreferredRV__c = 30000;
            CAP.TierPreferredL6MosTA__c = 75;
            CAP.TierRewardsAdvantageJobs__c = 6;
            CAP.TierRewardsAdvantageRV__c = 15000;
            CAP.TierRewardsAdvantageL6MosTA__c = 75;
        }
    }
}


Thank you!
HNT_NeoHNT_Neo
@Head In Cloud - Thank you very much! It worked!

Also, thanks everyone else for  your efforts! It is very much appreciated!!
Head In CloudHead In Cloud
@JH_Neo, happy to help. Please mark as best answer. This will help the rest of the community should they have a similar issue in the future. Thank you !