Triggers 涉及个人帐户的触发器测试用例出错

Triggers 涉及个人帐户的触发器测试用例出错,triggers,salesforce,apex-code,test-class,Triggers,Salesforce,Apex Code,Test Class,下面的测试测试一个触发器,该触发器为一个名为“支付目的地”的自定义对象插入一条记录,该对象与Account具有主详细信息关系,与Case具有查找关系。请注意,我的组织不幸使用个人帐户 我得到这个错误: System.DmlException:插入失败。第0行的第一个异常;第一个错误:无效的\字段\用于\插入\更新,业务关系可能不使用关系字段:邮件街道:[邮件街道] 以下是我正在尝试运行的代码: @isTest private class TestCreateNewDistributionDest

下面的测试测试一个触发器,该触发器为一个名为“支付目的地”的自定义对象插入一条记录,该对象与Account具有主详细信息关系,与Case具有查找关系。请注意,我的组织不幸使用个人帐户

我得到这个错误:

System.DmlException:插入失败。第0行的第一个异常;第一个错误:无效的\字段\用于\插入\更新,业务关系可能不使用关系字段:邮件街道:[邮件街道]

以下是我正在尝试运行的代码:

@isTest
private class TestCreateNewDistributionDestination{
static testMethod void testUpdateCaseToCreateNew(){
    ////Query RecordType Id to Create PersonAccounts for Test////
    Id RecId = [
        SELECT r.Id, r.Name, r.DeveloperName, r.IsPersonType 
        FROM RecordType r 
        WHERE sObjectType = 'Account' AND IsPersonType=True AND DeveloperName='Individual'
    ].Id;

    system.debug('RecordId:' + RecId);

    ////Create PersonAccounts for Test////

    account[] accs = new account[] {
        new account(Name='Mr. John Sandbox1'),
        new account(name='Mr. John Sandbox2')
    };
    insert accs;

    contact[] cons = new contact[] {
        new contact(accountid=accs[0].id,salutation='Mr.',firstname='John',lastname='Sandbox1'),
        new contact(accountid=accs[1].id,salutation='Mr.',firstname='John',lastname='Sandbox2')
    };
    insert cons;
    accs[0].recordtypeid = accs[1].recordtypeid = RecId;
    update accs;

    system.debug('Accounts Have Been Created');

    Map<String,Id> DDRTMap = new Map<String,Id>{};

    ////Generate a List of Disbursement Destination Record Types////
    List<RecordType> DDRTList = [
        SELECT r.DeveloperName, r.Id, r.Name
        FROM RecordType r
        WHERE sObjectType = 'Disbursement_Destination__c'];

    ////Put the List into a Map////
    for(RecordType RT: DDRTList){
        DDRTMap.put(RT.DeveloperName,RT.Id);
    }        

    system.debug('<<<<ABOUT TO INSERT CASES>>>>');

    ////Create 6 Cases for the Test; 2 of each of 3 record types; 1 insert, 1 update of each////
    Case[] Css = new Case[]{
        new Case(
            Account = accs.get(0), 
            Type = 'Wire Request', 
            RecordTypeId = DDRTMap.get('Disbursement_Destination_Wire'),
            Existing_or_New_Disbursement_Destination__c = 'Use/Create a New Disbursement Destination',
            Receiving_Account_s_Number_Case__c = '135792468',
            Receiving_Account_s_Name_Case__c = 'TEST Receiving Account',
            Payee_s_Name_Case__c = accs.get(0).name, 
            Payee_s_Street_Case__c = '1 Test Lane', 
            Payee_s_City_Case__c = 'Testville', 
            Payee_s_State_Case__c = 'NJ', 
            Payee_s_Zip_Code_Case__c = '12345',
            Receiving_Bank_s_Name_Case__c = 'TEST BANK',
            Receiving_Bank_s_ABA_ACH_Case__c = '123456789',
            Receiving_Bank_s_ABA_Wire_Case__c= '123456789',
            Receiving_Bank_s_Street_Case__c = '1 Bank Street', 
            Receiving_Bank_s_City_Case__c = 'Bankstown', 
            Receiving_Bank_s_State_Case__c = 'NJ', 
            Receiving_Bank_s_Zip_Code_Case__c = '98765'
        ),

        new Case(
            Account = accs.get(1), 
            Type = 'Wire Request', 
            RecordTypeId = DDRTMap.get('Disbursement_Destination_Wire'),
            Existing_or_New_Disbursement_Destination__c = 'Leave Disbursement Destination Blank',
            Receiving_Account_s_Number_Case__c = '135792468',
            Receiving_Account_s_Name_Case__c = 'TEST Receiving Account',
            Payee_s_Name_Case__c = accs.get(1).name, 
            Payee_s_Street_Case__c = '1 Test Lane', 
            Payee_s_City_Case__c = 'Testville', 
            Payee_s_State_Case__c = 'NJ', 
            Payee_s_Zip_Code_Case__c = '12345',
            Receiving_Bank_s_Name_Case__c = 'TEST BANK',
            Receiving_Bank_s_ABA_ACH_Case__c = '123456789',
            Receiving_Bank_s_ABA_Wire_Case__c= '123456789',
            Receiving_Bank_s_Street_Case__c = '1 Bank Street', 
            Receiving_Bank_s_City_Case__c = 'Bankstown', 
            Receiving_Bank_s_State_Case__c = 'NJ', 
            Receiving_Bank_s_Zip_Code_Case__c = '98765'
        ),
        new Case(
            Account = accs.get(0), 
            Type = 'Wire Request', 
            RecordTypeId = DDRTMap.get('Disbursement_Destination_ACH'),
            Existing_or_New_Disbursement_Destination__c = 'Use/Create a New Disbursement Destination',
            Receiving_Account_s_Number_Case__c = '135792468',
            Receiving_Account_s_Name_Case__c = 'TEST Receiving Account',
            Payee_s_Name_Case__c = accs.get(0).name, 
            Payee_s_Street_Case__c = '1 Test Lane', 
            Payee_s_City_Case__c = 'Testville', 
            Payee_s_State_Case__c = 'NJ', 
            Payee_s_Zip_Code_Case__c = '12345',
            Receiving_Bank_s_Name_Case__c = 'TEST BANK',
            Receiving_Bank_s_ABA_ACH_Case__c = '123456789',
            Receiving_Bank_s_ABA_Wire_Case__c= '123456789',
            Receiving_Bank_s_Street_Case__c = '1 Bank Street', 
            Receiving_Bank_s_City_Case__c = 'Bankstown', 
            Receiving_Bank_s_State_Case__c = 'NJ', 
            Receiving_Bank_s_Zip_Code_Case__c = '98765'
        ),

        new Case(
            Account = accs.get(1), 
            Type = 'Wire Request', 
            RecordTypeId = DDRTMap.get('Disbursement_Destination_ACH'),
            Existing_or_New_Disbursement_Destination__c = 'Leave Disbursement Destination Blank',
            Receiving_Account_s_Number_Case__c = '135792468',
            Receiving_Account_s_Name_Case__c = 'TEST Receiving Account',
            Payee_s_Name_Case__c = accs.get(1).name, 
            Payee_s_Street_Case__c = '1 Test Lane', 
            Payee_s_City_Case__c = 'Testville', 
            Payee_s_State_Case__c = 'NJ', 
            Payee_s_Zip_Code_Case__c = '12345',
            Receiving_Bank_s_Name_Case__c = 'TEST BANK',
            Receiving_Bank_s_ABA_ACH_Case__c = '123456789',
            Receiving_Bank_s_ABA_Wire_Case__c= '123456789',
            Receiving_Bank_s_Street_Case__c = '1 Bank Street', 
            Receiving_Bank_s_City_Case__c = 'Bankstown', 
            Receiving_Bank_s_State_Case__c = 'NJ', 
            Receiving_Bank_s_Zip_Code_Case__c = '98765'
        ),
        new Case(
            Account = accs.get(0), 
            Type = 'Wire Request', 
            RecordTypeId = DDRTMap.get('Disbursement_Destination_Check'),
            Existing_or_New_Disbursement_Destination__c = 'Use/Create a New Disbursement Destination',
            Receiving_Account_s_Number_Case__c = '135792468',
            Receiving_Account_s_Name_Case__c = 'TEST Receiving Account',
            Payee_s_Name_Case__c = accs.get(0).name, 
            Payee_s_Street_Case__c = '1 Test Lane', 
            Payee_s_City_Case__c = 'Testville', 
            Payee_s_State_Case__c = 'NJ', 
            Payee_s_Zip_Code_Case__c = '12345',
            Receiving_Bank_s_Name_Case__c = 'TEST BANK',
            Receiving_Bank_s_ABA_ACH_Case__c = '123456789',
            Receiving_Bank_s_ABA_Wire_Case__c= '123456789',
            Receiving_Bank_s_Street_Case__c = '1 Bank Street', 
            Receiving_Bank_s_City_Case__c = 'Bankstown', 
            Receiving_Bank_s_State_Case__c = 'NJ', 
            Receiving_Bank_s_Zip_Code_Case__c = '98765'
        ),

        new Case(
            Account = accs.get(1), 
            Type = 'Wire Request', 
            RecordTypeId = DDRTMap.get('Disbursement_Destination_Check'),
            Existing_or_New_Disbursement_Destination__c = 'Leave Disbursement Destination Blank',
            Receiving_Account_s_Number_Case__c = '135792468',
            Receiving_Account_s_Name_Case__c = 'TEST Receiving Account',
            Payee_s_Name_Case__c = accs.get(1).name, 
            Payee_s_Street_Case__c = '1 Test Lane', 
            Payee_s_City_Case__c = 'Testville', 
            Payee_s_State_Case__c = 'NJ', 
            Payee_s_Zip_Code_Case__c = '12345',
            Receiving_Bank_s_Name_Case__c = 'TEST BANK',
            Receiving_Bank_s_ABA_ACH_Case__c = '123456789',
            Receiving_Bank_s_ABA_Wire_Case__c= '123456789',
            Receiving_Bank_s_Street_Case__c = '1 Bank Street', 
            Receiving_Bank_s_City_Case__c = 'Bankstown', 
            Receiving_Bank_s_State_Case__c = 'NJ', 
            Receiving_Bank_s_Zip_Code_Case__c = '98765'
        )
    };

    system.debug('Cases Have Been Created, But Not Inserted');

    ////Insert the cases, update the cases needed
    test.starttest();
    insert Css;
    system.debug('Inserted Css');
    Css[1].Existing_or_New_Disbursement_Destination__c = 'Use/Create a New Disbursement Destination';
    Css[3].Existing_or_New_Disbursement_Destination__c = 'Use/Create a New Disbursement Destination';
    Css[5].Existing_or_New_Disbursement_Destination__c = 'Use/Create a New Disbursement Destination';
    update Css;
    system.debug('Updated Css');
    test.stoptest();

    List<Case> insertedCases = [
        SELECT Type, RecordTypeId
        FROM Case
        WHERE Id IN :Css];

    system.debug(insertedCases.size() + ' Cases Have Been Created');
    system.debug(insertedCases);
    System.AssertEquals(insertedCases.size(),6);

    for(Case Cs : insertedCases ){
        System.AssertEquals('Disbursement Destination Already Populated',Cs.Existing_or_New_Disbursement_Destination__c);
        System.AssertNotEquals('',Cs.Disbursement_Destination__c);
    }

    List<Disbursement_Destination__c> TestDDs = [
        SELECT name
        FROM Disbursement_Destination__c];
    system.debug(TestDDs);
    //System.Assert(TestDDs.size(),2);
}

}

如果您调出生成错误的那一行,并对代码进行裁剪,以便只显示与错误相关的行,则会有所帮助。对于延迟,堆栈跟踪列显示如下:Class.TestCreateNewDistributionDestination.testUpdateCaseToCreateNew:line 24,column 1我不确定要裁剪代码的哪一部分,所以我现在还不打算拿走任何东西。很抱歉造成混淆,这是我第一次尝试编写触发器和测试类。谢谢,任何帮助都将不胜感激!