2013-02-14 2 views
2

Я пишу тест для своего контроллера. Для этого мне нужно вставить событие в тестовую базу данных.Первая ошибка: INVALID_CROSS_REFERENCE_KEY, Assigned To ID: владелец не может быть пустым: [OwnerId]

Мой метод испытания:

static TestMethod void Test1_TestInsertWithValue() 
{ 
    Meeting_Master__c master = new Meeting_Master__c(); 
    Event event = new Event(); 
    Profile p = [SELECT Id From Profile WHERE Name='Standard User']; 
    User u2 = new User(Alias = 'newUser', Email = '[email protected]', EmailEncodingKey = 'UTF-8', LastName = 'Testing', 
    LanguageLocaleKey = 'en_US', LocaleSidKey='America/Los_Angeles', UserName='[email protected]', ProfileId=p.Id); 

    event.OwnerId = u2.Id; 
    event.StartDateTime = datetime.newInstance(2008, 12, 1); 
    event.EndDateTime = datetime.newInstance(2008, 12, 30); 
    event.subject = 'call'; 
    event.WhatId = master.Id; 
    insert master; 
    insert event; 
    ........... 
} 

Когда происходит событие вставки, я столкнулся эту ошибку:

System.DmlException: Insert failed. First exception on row 0; first error: INVALID_CROSS_REFERENCE_KEY, Assigned To ID: owner cannot be blank: [OwnerId]

Как исправить эту ошибку?

ответ

2

В качестве первого варианта можно вставить тест пользователя:

@isTest 
private class test{ 

    static TestMethod void Test1_TestInsertWithValue() { 
     Meeting_Master__c master=new Meeting_Master__c(); 
     Event event =new Event(); 
     Profile p=[SELECT Id From Profile WHERE Name='Standard User']; 
     User u2 =new User(Alias = 'newUser1' , 
          Email ='[email protected]', 
          EmailEncodingKey = 'UTF-8', 
          LastName = 'Testing', 
          LanguageLocaleKey='en_US', 
          LocaleSidKey='en_US', // changed for to avoid: INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST, Locale: bad value for restricted picklist field: America/Los_Angeles 
          UserName='[email protected]', 
          ProfileId=p.Id, 
          TimeZoneSidKey = 'America/Los_Angeles'); 
     insert u2; 

     event.OwnerId = u2.Id; 
     event.StartDateTime = datetime.newInstance(2008, 12, 1); 
     event.EndDateTime = datetime.newInstance(2008,12,10); // changed to 10-12-2008 for to avoid: FIELD_INTEGRITY_EXCEPTION, Event duration can not be longer than 14 days 
     event.subject='call'; 
     event.WhatId=master.Id; 
     Insert master; 
     insert event; 
    } 

} 

Второй вариант является пытается использовать System.runAs() http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_testing_tools_runas.htm

@isTest 
private class test{ 

    static TestMethod void Test1_TestInsertWithValue() { 
     Meeting_Master__c master=new Meeting_Master__c(); 
     Event event =new Event(); 
     Profile p=[SELECT Id From Profile WHERE Name='Standard User']; 
     User u2 =new User(Alias = 'newUser1' , 
          Email ='[email protected]', 
          EmailEncodingKey = 'UTF-8', 
          LastName = 'Testing', 
          LanguageLocaleKey='en_US', 
          LocaleSidKey='en_US', 
          UserName='[email protected]', 
          ProfileId=p.Id, 
          TimeZoneSidKey = 'America/Los_Angeles'); 

     Insert master; 

     System.runAs(u2) { 
      event.StartDateTime = datetime.newInstance(2008, 12, 1); 
      event.EndDateTime = datetime.newInstance(2008,12,10); 
      event.subject='call'; 
      event.WhatId=master.Id; 

      insert event; 
     } 
    } 

} 
+0

пожалуйста ответ на этот запрос http://stackoverflow.com/вопросы/14912599/синтаксической-JSON-объект-в-Salesforce-апекс –

4

Вы забыли вставить u2 перед линией event.OwnerId =u2.Id;.