2012-05-25 34 views
0

编写testMethod时,我无法检索相关联系人字段。在下面的例子中,我期望最终的assert返回true。我正在测试的代码工作正常,select仅在测试上下文中失败。Salesforce APEX - 测试环境对相关对象返回null

为什么从SOQL查询中不返回联系信息?

static testMethod void FailTest() 
{ 
     Contact client = new Contact(FirstName='TestFirst1', LastName='TestFirst', BirthDate = Date.parse('01/01/1986'), Gender__c = 'Male'); 
     insert client; 
     Opportunity opp = new Opportunity(Name = 'Test Opp' + Math.random(), CloseDate=Date.Today(), StageName='ASR - Case Design', Product_Types__c='UL', Face_Amount_Applied_For__c=500, Estimated_Target_Premium__c=1000, X1st_Client__r = client); 
     insert opp; 

     Opportunity selectOpp = [Select o.X1st_Client__r.LastName From Opportunity o WHERE o.Id = :opp.Id LIMIT 1]; 

     system.assertNotEquals(opp.X1st_Client__r.LastName, null); //true 
     system.assertNotEquals(opp.Name, null); //true 
     system.assertNotEquals(selectOpp.Name, null); //true 
     system.assertNotEquals(selectOpp.X1st_Client__r.LastName, null); //false, should be true 
} 

回答

2

我认为问题可能是您将机会与客户记录相关联的方式。你有X1st_Client__r =客户端,我想你可能真的想要做的是X1st_Client__c = client.Id。我不认为插入DML会考虑X1st_Client__r中表示的对象。我认为它只会在插入时注意X1st_Client__c值。

+0

是的,这将做到这一点。我真的很惊讶,它甚至编译为。 –