运行Salesforce测试时如何运行触发器?

时间:2019-08-28 09:08:39

标签: salesforce apex

我有3个触发器,它们正在为其编写测试用例。 一种用于插入帐户,另一种用于插入合同,如下所示:

帐户触发条件:

Trigger RTT_Account_I on Account (after insert) {
set<ID> ids = Trigger.newMap.keyset(); 
SC_RTTT.Process('Account','insert',ids); 
}

机会触发器:

Trigger RTTT_Opportunity_I on Opportunity (after insert) {
set<ID> ids = Trigger.newMap.keyset(); 
SC_RTTT.Process('Opportunity','insert',ids); 

合同触发:

Trigger RTT_Contact_I on Contact (after insert) {
set<ID> ids = Trigger.newMap.keyset(); 
SC_RTTT.Process('Contact','insert',ids); 
}

也SC_RTTT.Process是一个已定义的类,它期望为Contract定义参数,即“ Contact”,“ insert”和Contract的ID。

现在我对合同的测试如下:

@isTest
public class TestRTT_Contract_I 
{
   public static testMethod void TestRTT_RTDS_Contract_I(){
Account act = New Account();
act.Name = 'TEST2';
act.Site = 'www.acme.com';
act.Type = 'Customer';
act.BillingStreet = 'Street';
act.BillingCity = 'City';
act.BillingCountry = 'US';
Insert act;

Opportunity OO = New Opportunity();
    OO.Name = 'TEST1';
    OO.Type = 'New Buisness';      
    OO.AccountId = act.Id;
    OO.CloseDate = Date.today();
    OO.StageName = 'Agreement';      
    OO.ForecastCategoryName = 'Pipeline';          
    Insert OO;

     Opportunity opp = [SELECT Id, AccountId, CloseDate, StageName      FROM Opportunity WHERE Id=:OO.Id ];
 Contract c = new Contract(AccountId = opp.AccountId,ContractTerm = 12,StartDate = opp.CloseDate,OwnerExpirationNotice = '30');
 insert c;    
 }
}

我创建了一个帐户和机会,并从中创建了合同。

我进行了一些调试,发现似乎发生了什么事,当我插入Account时,似乎调用了Account触发器,因此流程获取参数Account 那应该好吗?

一旦插入机会,就会调用机会Triger。

问题是,一旦我插入Contract,就会调用Process函数,但是参数错误;它把帐户。 如果我删除帐户和机会触发器,它似乎可以正常工作。

就好像存在某种计时问题。 因此,我假设将先调用Account触发器,然后依次是Opportunity和Contract,但不会调用Contract。 实际上,我要做的只是插入“帐户和机会”,而不会触发这些触发器和合同。 可能是什么原因导致的?或者这是正确的方法?

谢谢

0 个答案:

没有答案