I have this select statement that fetches ID and a string from a custom object and creates a map using them. For some reason, when I run test, the select statement doesn't return any values. When I run the same set of statements in Execute Anonymous window, the results are returned just fine. Here's my code below:
// New Campuses
map<ID,String> mapCampusNew = new map<ID,String>();
List<Campus__c> campuses = [SELECT Id, Shortcode__c FROM Campus__c WHERE Active__c = true];
for( Campus__c cm : campuses ) {
mapCampusNew.put( cm.Id, cm.Shortcode__c );
}
System.debug( 'NCMap: ' + mapCampusNew );
Run within the trigger, this outputs:
23:02:45.684 (3684685025)|USER_DEBUG|[18]|DEBUG|NCMap: {}
while when run in Execute Anonymous window, I get:
Anonymous execution was successful.
29.0 APEX_CODE,DEBUG;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;VALIDATION,INFO;WORKFLOW,INFO
Execute Anonymous: // New Campuses
Execute Anonymous: map<ID,String> mapCampusNew = new map<ID,String>();
Execute Anonymous: List<Campus__c> campuses = [SELECT Id, Shortcode__c FROM Campus__c WHERE Active__c = true];
Execute Anonymous: for( Campus__c cm : campuses ) {
Execute Anonymous: mapCampusNew.put( cm.Id, cm.Shortcode__c );
Execute Anonymous: }
Execute Anonymous: System.debug( 'NCMap: ' + mapCampusNew );
23:37:08.046 (46819693)|EXECUTION_STARTED
23:37:08.046 (46831803)|CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex
23:37:08.047 (47769663)|SOQL_EXECUTE_BEGIN|[3]|Aggregations:0|select Id, Shortcode__c from Campus__c where Active__c = true
23:37:08.053 (53840428)|SOQL_EXECUTE_END|[3]|Rows:2
23:37:08.054 (54831491)|USER_DEBUG|[7]|DEBUG|NCMap: {a0f190000004CYcAAM=MIA, a0f190000004LAaAAM=SJC}
23:37:08.264 (54877967)|CUMULATIVE_LIMIT_USAGE
23:37:08.264|LIMIT_USAGE_FOR_NS|(default)|
How can I debug where it's going wrong?
Thank you.
@isTest(SeeAllData=true)
, tests that rely on what is in the org tend to be fragile. So it is best if your tests do not use@isTest(SeeAllData=true)
and instead insert specific data that they can then rely on in their asserts.