我對編碼相對缺乏經驗,從未被迫寫過測試類。我在概念上不理解它。我寫了以下觸發器:觸發器的頂點測試類 - 初學者指南
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)[這意味着什麼是btw?]。
我寫的測試類基本上只是試圖讓所有東西都在裏面,希望代碼覆蓋率能夠提高。我不知道,我實際上應該與測試類做:
@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);
}
}
誰能幫我請它的駕駛我瘋了嗎?