我正在为我的控制器编写一个测试。为此,我必须在测试数据库中插入一个事件。
我的测试方法是:
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 = 'newuser@testorg.com', EmailEncodingKey = 'UTF-8', LastName = 'Testing',
LanguageLocaleKey = 'en_US', LocaleSidKey='America/Los_Angeles', UserName='newuser@testorg.com', 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:插入失败。第0行的第一个例外;第一个错误:INVALID_CROSS_REFERENCE_KEY,分配给ID:所有者不能为空:[OwnerId]
如何纠正此错误?
答案 0 :(得分:4)
您忘记在u2
行前插入event.OwnerId =u2.Id;
。
答案 1 :(得分: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 ='newuser123@testorg.com',
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='newuser123@testorg.com',
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 ='newuser123@testorg.com',
EmailEncodingKey = 'UTF-8',
LastName = 'Testing',
LanguageLocaleKey='en_US',
LocaleSidKey='en_US',
UserName='newuser123@testorg.com',
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;
}
}
}