Salesforce 触发测试类

Salesforce 触发测试类,salesforce,apex-code,Salesforce,Apex Code,我正在为我的触发器编写一个测试类,用于检查帐户副本。 但我的测试类中出现以下错误: 错误:编译错误:比较参数必须是兼容的类型:Schema.SObjectField,第35行第42列的字符串 测试类别为: @isTest public class trg_AccountDuplicatePreventer_FinalTest{ static testMethod void Test0_TestInsertWithValue() { //Set<Accou

我正在为我的触发器编写一个测试类,用于检查帐户副本。 但我的测试类中出现以下错误:

错误:编译错误:比较参数必须是兼容的类型:Schema.SObjectField,第35行第42列的字符串

测试类别为:

@isTest

public class trg_AccountDuplicatePreventer_FinalTest{
    static testMethod void Test0_TestInsertWithValue()
    {

        //Set<Account> Accset = new Set<Account>();

        Account acc1 =  new Account(Name = 'Agency0', Phone='9811309977',Physical_Street__c = 'ABC0', Physical_State_Province__c = 'NY',Physical_Zip_Postal_Code__c = '2010',Physical_Country__c= 'USA');
        Account acc2 =  new Account(Name = 'Agency00', Phone='9811309988',Physical_Street__c = 'ABC00', Physical_State_Province__c = 'NY',Physical_Zip_Postal_Code__c = '2010',Physical_Country__c= 'USA');
        Account acc3 =  new Account(Name = 'Agency000', Phone='9811309999',Physical_Street__c = 'ABC000', Physical_State_Province__c = 'NY',Physical_Zip_Postal_Code__c = '2010',Physical_Country__c= 'USA');

        Account[] accs = new Account[]{acc1,acc2,acc3};
        insert accs;

        acc2.Phone='9811309999';
        acc3.Physical_Street__c='ABC0000';
        acc3.Phone='9811308888';
        update accs;

        Account dupe1 =  new Account(Name = 'Agency0', Phone='9811309977',Physical_Street__c = 'ABC0', Physical_State_Province__c = 'NY',Physical_Zip_Postal_Code__c =    '2010',Physical_Country__c= 'USA');


        try{
            insert dupe1;
            System.assert(false);
        }catch(DMLException e)
        {
            for (Integer i = 0; i < e.getNumDml(); i++)
            {
                 System.assert(e.getNumDml() == 1);
                 System.assert(e.getDmlIndex(i) == 0);
                 System.assert(e.getDmlFields(i).size() == 3);
                 System.assert(e.getDmlFields(i)[0] == 'Name');
                 System.assert(e.getDmlFields(i)[1] == 'Phone');
                 System.assert(e.getDmlFields(i)[2] == 'Physical_Street__c');
                 System.assert(e.getDmlMessage(i).indexOf('An account with this name, phone, street already exists.') > -1);
            }
        }
    }
}
@isTest
公共类trg\U AccountDuplicatePreventor\U FinalTest{
静态测试方法void Test0\u TestInsertWithValue()
{
//Set Accset=新集合();
账户acc1=新账户(名称='Agency0',电话='9811309977',实体街道c='ABC0',实体州c='NY',实体邮政编码c='2010',实体国家c='USA');
账户acc2=新账户(名称='Agency00',电话='9811309988',实体街道c='ABC00',实体州c='NY',实体邮政编码c='2010',实体国家c='USA');
账户acc3=新账户(名称='Agency000',电话='9811309999',实体街道c='ABC000',实体州c='NY',实体邮政编码c='2010',实体国家c='USA');
账户[]accs=新账户[]{acc1,acc2,acc3};
插入accs;
acc2.Phone='9811309999';
acc3.实体街(ABC0000);
acc3.Phone='9811308888';
更新accs;
账户dupe1=新账户(名称='Agency0',电话='9811309977',实体街道c='ABC0',实体州c='NY',实体邮政编码c='2010',实体国家c='USA');
试一试{
插入dupe1;
系统。断言(假);
}捕获(DME)
{
for(整数i=0;i-1);
}
}
}
}
如何在测试代码中修复此错误


谢谢

getDmlFields返回Schema.sObjectField对象的列表,因此您需要将它们与其他Schema.sObjectFields进行比较,或者获取它们的名称以将它们与字符串进行比较

System.assert(e.getDmlFields(i)[0] == Account.Name);
System.assert(e.getDmlFields(i)[1] == Account.Phone);
System.assert(e.getDmlFields(i)[2] == Account.Physical_Street__c);

如果我使用上面的方法,我得到的错误是方法签名不正确。我忘记了您只能从字段descripe result而不是schema.field获取名称。我已修复了答案中的代码。您可能希望指定更多细节,如您在此处尝试实现的目标。另外,您可以突出显示失败的行。您好,Anup,我的触发代码尝试根据帐户名称、街道和电话匹配或姓名和电话匹配或姓名和街道匹配来识别系统中的重复帐户。我编写的测试类为我提供了100%的覆盖率,但我得到了1个测试失败:Message:System.DmlException:Insert failed。第0行的第一个异常;第一个错误:字段\自定义\验证\异常,
系统中存在具有此名称/电话/物理街道的代理记录。如果您希望创建机构记录,请将“创建新记录”字段值更改为“是”。

潜在的重复机构包括:
具有名称的机构,电话和实体街道匹配:cs14.salesforce.com/001c000003ncymaai>Agency000 |
名称和电话匹配的代理:cs14.salesforce.com/001c00003ncymaai>Agency000堆栈跟踪:Class.trg\u accountreplicateventor\u FinalTest.Test0\u TestInsertWithValue:第14行第1列