2014-01-21 28 views
0

我有一個簡單的觸發器,當我的自定義對象上的SD_Action__c字段爲特定值時,該觸發器應該創建新機會。代碼沒有錯誤,但是當我嘗試更新沙箱或生產中的字段時沒有任何反應。我錯過了什麼讓m.SD_Action__c=='Generate Opportunity'這個偉大的機會?Salesforce Apex在自定義對象字段更改後創建商機

trigger MDwinning on MD_Meeting__c (after update) { 
    List <Opportunity> oppToInsert = new List <Opportunity>(); 
    for (MD_Meeting__c m : Trigger.new) { 
     if (m.SD_Action__c == 'Generate Opportunity') { 
      Opportunity o = new Opportunity(); 
      // o.Owner = m.Sales_Director__c, 
      o.Market_Developer__c = m.Market_Developer__c; 
      //o.Account = m.Account__c; 
      oppToInsert.add(o); 
     }//end if 
    }//end for o 
    try { 
     insert oppToInsert; 
    } catch (system.Dmlexception e) { 
     system.debug (e); 
    } 
} 

這裏是我的測試類:

@isTest (SeeAllData = true) 
public with sharing class MDwinningTest { 
    static testMethod void MDwinningTest() { 
     MD_Meeting__c m = new MD_Meeting__c(
      Account__c = 'test Account', 
      Desired_Meeting__c = 'Call', 
      Name = 'Meeting name', 
      Sales_Director__c = 'SD Name', 
      Market_Developer__c = 'MD Name', 
      Meeting_Date__c = Date.today(), 
      Contact__c = 'Test Contact', 
      Title__c = 'Boss', 
      Functional_Role__c = 'eCommerce - VP', 
      Contact_Email__c = '[email protected]', 
      SD_Action__c = 'Generate Opportunity', 
      Primary_URL__c = 'http://www.google.com/' 
     ); 
     insert m; 
    } 
} 

回答

0

您的測試沒有正確,因爲你只用insert操作工作,但你的觸發作用於update模式。所以,你必須改變測試或觸發或兩者

@isTest 
private class MDwinningTest { 

    @isTest 
    static void MDwinningTest() { 

     // prepare test data 

     MD_Meeting__c m = new MD_Meeting__c(
      Account__c = 'test Account', 
      Desired_Meeting__c = 'Call', 
      Name = 'Meeting name', 
      Sales_Director__c = 'SD Name', 
      Market_Developer__c = 'MD Name', 
      Meeting_Date__c = Date.today(), 
      Contact__c = 'Test Contact', 
      Title__c = 'Boss', 
      Functional_Role__c = 'eCommerce - VP', 
      Contact_Email__c = '[email protected]', 
      Primary_URL__c = 'http://www.google.com/' 
     ); 
     insert m; 
     m.SD_Action__c = 'Generate Opportunity'; 
     update m; 
     System.assertEquals(1, (Integer)[SELECT Count(Id) FROM Opportunity][0].get('Expr0')); 
    } 
} 

我建議禁用SeeAllData =真實的,因爲它的風險,因爲一些組織的在您的代碼可能會被 部署可能沒有需要的數據,因此你的測試將被打破

你也可以改變當前觸發器在插入工作和更新

trigger MDwinning on MD_Meeting__c (after insert, after update) {

相關問題