triggers - 顶点测试类
问题描述
所以我是销售人员的新手,我完成了培训,现在正在做一个项目。但是在我的项目中,我偶然发现了一个测试类,我没有找到编写它的方法,所以如果有人能帮助我找到一种编写它的方法,我将不胜感激。这是代码:
public class AP01_Opportunity
{
//Method to create a new service contract when opportunity = Gagné
public static void CreateContract(List<Opportunity> listOpp, Map<Id, Opportunity> oldMap)
{
//Variable Declaration
ServiceContract sc;
List<ServiceContract> listSCToAdd = new List<ServiceContract>();
List<ContractLineItem> listContractItems = new List<ContractLineItem>();
List<Opportunity> listOppGagne = new list<Opportunity>();
//Loop in list of opportunities
for(Opportunity opp : listOpp)
{
if(opp.StageName == Label.ClotureGagne && !oldMap.get(opp.Id).isWon)
{
listOppGagne.add(opp);
}
}
//check if list has opportunity becoming won
if(listOppGagne.size() > 0){
Map<Id, Opportunity> mapOppGagne = new Map<Id, Opportunity> ([SELECT Id,
Name,
StageName,
Pricebook2Id,
Account.Name,
(SELECT Id,
PricebookEntryId,
PricebookEntry.Name,
Quantity,
UnitPrice
FROM OpportunityLineItems)
FROM Opportunity
WHERE Id in :listOppGagne]);
for( Opportunity opp : listOppGagne )
{
//Create new service contract
sc = new ServiceContract();
sc.Name = opp.Name;
sc.ApprovalStatus = Label.Activated;
sc.OpportunityId__c = Id.valueOf(opp.Id);
sc.Pricebook2Id = opp.Pricebook2Id;
sc.StartDate = Date.today();
listSCToAdd.add(sc);
}
if(listSCToAdd.size() > 0){
insert listSCToAdd;
Opportunity currentOpp;
ContractLineItem cli;
Id oppId;
for(ServiceContract servcont : listSCToAdd)
{
oppId = servcont.OpportunityId__c;
if(mapOppGagne.containsKey(oppId))
{
currentOpp = mapOppGagne.get(oppId);
//copy the oppLineItems per opportunity to the respective Service Contract
for(OpportunityLineItem items : currentOpp.OpportunityLineItems)
{
cli = new ContractLineItem();
cli.PricebookEntryId = items.PricebookEntryId;
cli.Quantity = items.Quantity;
cli.UnitPrice = items.UnitPrice;
cli.ServiceContractId = servcont.Id;
listContractItems.add(cli);
}
}
}
if(listContractItems.size() > 0)
{
insert listContractItems;
}
}
}
}
}
此代码是一个触发器,当机会阶段更改为“Cloturé Gagné”时,它会创建一个新的服务合同记录,其中合同行项目从机会行项目复制,这意味着在法语中已关闭。
先感谢您。
解决方案
为了编写一个简单的测试类,我建议您使用以下指南:https ://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_qs_test.htm
这个想法很简单:假设您在 Test 类中创建了一个 Opportunity 并在您的情况下进行插入或更新 - 您的触发器类将自动触发并运行 AP01_Opportunity 类中的代码。你可以放一些
System.debug('some message');
检查您的逻辑是否按预期工作以及执行了哪些代码块
推荐阅读
- sql - Sql 查询查找在发送电子邮件后第 2 天到第 5 天之间打开电子邮件的用户
- windows - 下载时如何自动运行 .osz 格式的每个文件
- mongodb - Mongodb Atlas - 不支持大于 50 的管道长度
- javascript - 如何找到数组中的最大一位整数?
- c# - C# NetworkStream 写入/读取与套接字发送/接收?
- c# - 如何在 c# 中为 asp.net 项目使用 .Contains() 方法检查值和文本?
- mysql - MySql 因无法为缓冲池分配内存而崩溃
- python - 部署到 Heroku 的应用程序无法远程访问 cPanel 中的 MySQL 数据库
- c - 如何从谷歌 api 解码 json 数据
- python - 为什么我们要为链表中的头节点创建一个不同的类?