2012-07-28 2 views
0

계정 복제본을 검사하는 트리거 용 테스트 클래스를 작성하고 있습니다. 하지만 내 테스트 클래스에 다음과 같은 오류가 발생합니다 :트리거 테스트 클래스

Error: Compile Error: Comparison arguments must be compatible types: Schema.SObjectField, String at line 35 column 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); 
      } 
     } 
    } 
} 

가 어떻게 내 테스트 코드에서이 오류를 수정합니까?

감사합니다.

+0

여기서 달성하고자하는 것과 같은 세부 사항을 지정할 수 있습니다. 또한, 실패한 행을 강조 표시 할 수 있습니까? – Anup

+0

안녕하세요 Anup, 내 트리거 코드 계정 이름, 거리 및 전화 일치 또는 이름 및 전화 일치 또는 이름 및 거리 일치에 따라 시스템에서 계정 중복을 식별하려고합니다. 내가 작성한 테스트 클래스는 100 % 적용 범위를 제공하지만 1 테스트 실패가 발생합니다. – user1518186

+0

메시지 : System.DmlException : 삽입에 실패했습니다. 행 0에 대한 첫 번째 예외. 첫 번째 오류 : FIELD_CUSTOM_VALIDATION_EXCEPTION,
이 이름/전화/물리적 스트리트가있는 대행사 레코드가 시스템에 존재합니다. 대행사 레코드를 만들려면 "새 레코드 만들기"필드 값을 예로 변경하십시오.

잠재적 인 중복 대행사 포함 :
이름, 전화 번호 및 물리적 거리 일치 장치가있는 대행사 : Agency000 |
이름과 전화 번호가 일치하는 기관 : Agency000 user1518186

답변

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); 
+0

위의 내용을 사용하면 메서드 서명이 잘못되었습니다. – user1518186

+0

pls 내가 위의 방아쇠를 덮을 수있는 방법을 제안한다. 조금 긴급하다. – user1518186

+1

당신은 단지 schema.field가 아닌 field describe result에서 이름을 얻을 수 있다는 것을 잊었다. 나는 답안에서 그 코드를 고쳤다. –