0

アカウントの重複をチェックするトリガーのテスト クラスを作成しています。しかし、テストクラスで次のエラーが発生します。

エラー: コンパイル エラー: 比較引数は互換性のある型である必要があります: 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);
            }
        }
    }
}

テスト コードでこのエラーを修正するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

2

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);
于 2012-07-28T14:10:40.230 に答える