gpt4 book ai didi

class - Apex 触发器测试类 - 新手指南

转载 作者:行者123 更新时间:2023-11-28 21:31:33 28 4
gpt4 key购买 nike

我对编码比较缺乏经验,之前也没有被逼写过测试类。我在概念上不理解它。我写了以下触发器:

trigger CreateNewInvoiceAndUpdateCM on CampaignMember(after insert, after update){
for (CampaignMember cm: trigger.new){

if(cm.Status == 'Needs Renewal and Invoice'){
Asset memb = [SELECT Id, Product2Id FROM Asset WHERE Id = :cm.Membership__c];
Product2 prod = [SELECT Id, ProductCode FROM Product2 WHERE Id = :memb.Product2Id];
Pricebook2 pb =[SELECT Id, Name FROM Pricebook2 WHERE Name = 'Standard Price Book'];
PricebookEntry pbe = [SELECT Id, UnitPrice, Pricebook2Id, Product2Id FROM PricebookEntry WHERE Pricebook2Id = :pb.Id AND Product2Id = :prod.Id];

Invoice__c inv = new Invoice__c();
inv.Membership__c = cm.Membership__c;
inv.Contact__c = cm.ContactId;
inv.Price__c = pbe.UnitPrice;
insert inv;



CampaignMember newCm = [select Id, Invoice__c FROM CampaignMember WHERE Id = :cm.Id];
newCm.Invoice__c = inv.Id;
newCM.Status = 'Needs Renewal';
update newCm;

}}
}

但是我不知道如何正确编写测试类。我浏览了 Salesforce 网站上的所有文档和此处无数的帖子,但我未能将代码覆盖率提高到 13% (2/15)[顺便说一句,这是什么意思?]。

我编写的测试类基本上只是尝试将所有内容都放入其中,希望代码覆盖率会上升。我不知道我实际上应该用测试类做什么:

@isTest 

private class testCreateNewInvoiceAndUpdateCM{

static testMethod void testCreateNewInvoiceAndUpdateCM(){

PricebookEntry pbe = new PriceBookEntry();
pbe.UnitPrice = 2;

Campaign camp = new Campaign();
camp.Name = 'Test Campaign';
insert camp;

Account acc = new Account();
acc.Name ='Test Account';
insert acc;

Contact cont= new Contact();
cont.LastName = 'LastName';
cont.AccountId = acc.Id;
insert cont;


Asset ass = new Asset();
ass.Name = 'Test Asset';
ass.Membership_Start_Date__c = System.today();
ass.ContactId = cont.Id;
ass.AccountId = ass.Id;
insert ass;

Invoice__c inv = new Invoice__c();
inv.Membership__c = ass.Id;
inv.Contact__c = cont.Id;
inv.Price__c = pbe.UnitPrice;
insert inv;

CampaignMember cm = new CampaignMember();
cm.CampaignId = camp.Id;
cm.ContactId = cont.Id;
cm.Membership__c = ass.Id;
cm.Status = 'Needs Renewal and Invoice';
cm.Invoice__c = Inv.Id;

insert cm;


CampaignMember cm2 = [select Id, Status, Invoice__c from CampaignMember where Id = :cm.Id];
System.assertEquals('Needs Renewal and Invoice',cm.Status);







}
}

谁能帮帮我,这让我发疯了?

最佳答案

在编写测试类之前,您需要重写触发器。您永远不会在 for 循环内查询。您还应该通过使用连接来最小化查询的数量。您应该查看 apex 最佳实践指南。从这里开始:

http://wiki.developerforce.com/page/Apex_Code_Best_Practices

关于class - Apex 触发器测试类 - 新手指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664060/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com