2013-10-29 40 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行。 你能否指定哪两行触发器通过了测试?这一定会帮助你理解你的问题更好。