2013-10-29 46 views
0

我對編碼相對缺乏經驗,從未被迫寫過測試類。我在概念上不理解它。我寫了以下觸發器:觸發器的頂點測試類 - 初學者指南

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); 







    } 
} 

誰能幫我請它的駕駛我瘋了嗎?

回答

0

(2/15)表示15行中的2行(觸發器)通過了測試,還有13行要測試,這意味着您的測試類代碼不包含這13行。 你能否指定哪兩行觸發器通過了測試?這一定會幫助你理解你的問題更好。