2014-11-12 1 views
0

Я просто написал этот триггер и, кажется, отлично работает в dev, мне нужно его переместить в производство, однако класс тестирования, который я написал, проходит тест, но не охватывает триггер. Любая помощь будет принята с благодарностью. Я здесь немного зеленый. Я знаю, что должен вставлять контакт (учетная запись - это поле req), а затем обновлять контактное поле. Я просто не знаю, как это сделать. СпасибоТестовый класс для триггера

trigger PropOwned on Contact (after update) { 
    for (Contact c : Trigger.new) { 
     McLabs2__Ownership__c ownNew = new McLabs2__Ownership__c(); 
     Contact oldContact = Trigger.oldMap.get(c.id); 
     if (c.One_Prop_Owned__c != oldContact.One_Prop_Owned__c && c.One_Prop_Owned__c != null) { 
      ownNew.McLabs2__Contact__c = c.id; 
      ownNew.McLabs2__Property__c = c.One_Prop_Owned__c; 
      insert ownNew; 
     } 
    } 
} 

Это класс испытаний, который я написал.

@isTest 
public class TestOwnership { 
    static testMethod void createOwnership() { 
     McLabs2__Ownership__c ownNew = new McLabs2__Ownership__c(); 
     ownNew.McLabs2__Contact__c = 'Michael Webb'; 
     ownNew.McLabs2__Property__c = '131 West 33rd Street'; 
     insert ownNew; 
    } 
} 

ответ

0

Ваш тестовый класс просто создает объект McLabs2__Ownership__c и вставляет этот объект в базу данных. В результате этого триггера на McLabs2__Ownership__c (если существует) будет вызываться, но вы должны проверить триггер на объекте Contact. Таким образом, вам нужно вставить учетную запись и после нее обновить ее, потому что ваш контактный триггер работает в режиме after update.

Итак, вам нужно что-то вроде этого

@isTest 
private class TestOwnership { 

    static testMethod void whenContactUpdatedNewOwnershipIsInserted() { 
     // create contact, you have to replace 'value1' with appropriate data type 
     Contact contact = new Contact(name = 'Test Contact', One_Prop_Owned__c = 'value1'); 
     insert contact; 
     contact.One_Prop_Owned__c = 'value2'; // you have to replace value2 with appropriate data type 
     update contact; 
     // in this place you should has only one record of McLabs2__Ownership__c in database, because in test context real data isn't visible 
     List<McLabs2__Ownership__c> ownerships = [SELECT Id, McLabs2__Contact__c, McLabs2__Property__c FROM McLabs2__Ownership__c]; 
     System.assertEquals(1, ownerships.size()); 
     System.assertEquals(contact.Id, ownerships[0].McLabs2__Contact__c); 
     System.assertEquals(contact.One_Prop_Owned__c, ownerships[0].McLabs2__Property__c); 
    } 
} 

Прочитайте следующие статьи, которые могут быть очень полезны для вас:

  1. Apex Trigger best practice
  2. SOQL in loop
+0

Спасибо я должен подумайте об этом, contact.One_Prop_Owned__c - это поле поиска, поэтому, когда я пытаюсь p ut значение в нем или заменить его, говорит, что это недопустимый id. Я прочитаю оба из тех, что я прочитал первый. Спасибо за вашу помощь. –

+0

Отлично, мой вопрос к вам ответил на мой вопрос, и тестовый класс работал, 100-процентное покрытие! Спасибо Спасибо спасибо! –