Не совсем точно, каковы были ваши требования для вашего проекта, вы, вероятно, можете сделать это без кода, использующего поле накопительной суммы, которое подсчитывает возможности, связанные с учетной записью, имеющей тип, используемый в Trigger_Help__c , а затемпоставить возможность при проверке того, что когда ISNEW () , если Account.Count_Of_Type__c> 0 вызывает проверку, ИЛИ при возможности создать скрытое уникальное поле, которое является объединением учетной записи.id и тип Opportunity, который может быть установлен рабочим процессом или компоновщиком процесса.Это предотвратит добавление дубликатов типов для данной учетной записи.
Но к вашему первоначальному вопросу: в вашем тесте я не вижу, чтобы вы установили поле Trigger_Help__c , если это не установлено автоматизацией.Кроме того, при создании второго оппа вам не нужно выполнять запрос учетной записи, вы можете просто использовать acct.Id из более раннего кода.
Для вашего улова вы должны подтвердить, чтоe.getMessage () - это сообщение, которое вы ожидаете от ошибки добавления в триггере.
Возможно, вам также понадобится сделать отдельное место, где вы запускаете As (admin_user), где admin_user - это пользователь, которого вы создаете вместе с системным администратором.профиль, чтобы гарантировать, что вы не получите ошибку при запуске от имени пользователя с правами администратора, например:
@isTest
private class TestleadDuplicatePreventer {
@isTest static void TestleadDuplicatePreventerwithOneOpp() {
Account acct = new Account(Name='Test Account');
insert acct;
Opportunity opp = new Opportunity(Name=acct.Name + ' Opportunity',
StageName='Open Opportunity',
CloseDate=System.today().addMonths(1),
Facility__c='Tacoma WA',
Oppty_Type__c='UCO Service',
AccountID=acct.Id);
insert opp;
Test.startTest();
opp= new Opportunity(Name='Opportunity Test',
StageName='Open Opportunity',
CloseDate=System.today().addMonths(2),
Facility__c='Tacoma WA',
Oppty_Type__c='UCO Service',
AccountId=acct.Id);
try
{
insert opp;
}
catch(Exception duplicate)
{
System.assertEquals('An Opportunity of this type already exists on this Account. Please contact a system administrator with questions.', duplicate.getMessage())
}
//this should probably be in a separate test method
Profile p = [SELECT Id FROM Profile WHERE Name='System Administrator'];
User u2 = new User(Alias = 'newUser', Email='newuser@testorg.com',
EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US',
LocaleSidKey='en_US', ProfileId = p.Id,
TimeZoneSidKey='America/Los_Angeles', UserName='newuser@testorg.com');
System.runAs(u2) {
insert opp;
}
Test.stopTest();
}
}