我有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。 实际上,我要做的只是插入“帐户和机会”,而不会触发这些触发器和合同。 可能是什么原因导致的?或者这是正确的方法?
谢谢