[英]How do I get code coverage in Salesforce?
我不是開發人員,但在 GitHub 上找到了一些信息,它給出了一個 Apex class,它在創建報價時創建了一個報價 PDF。 我在我的沙箱中進行了測試,一切正常,但它告訴我我的代碼覆蓋率為 0,所以我無法部署到 Prod。 以下是 Apex 及其測試。 關於可能出什么問題的任何想法? 我遵循了本文中提供代碼鏈接的所有步驟。
頂點 Class
`公共 class generateQuotePdfDocument{
@InvocableMethod
public static void CreateQuote(List<Id> quoteIds)
{
createQuoteFutureMethod(quoteIds);
}
@future(callout=true)
public static void createQuoteFutureMethod (List<Id> quoteIds) {
//Initialize the quote url
String quoteUrl = '/quote/quoteTemplateDataViewer.apexp?';
//Get the Quote Template Id from Custom Settings
String quoteTemplateId = Label.QuoteTemplateId;
//List variable to get all the Quote Documents
List<QuoteDocument> lstQuoteDoc = new List<QuoteDocument>();
if(!quoteIds.isEmpty() && quoteIds.size() > 0) {
for(Id quoteId :quoteIds) {
//Construct the quote URL to generate PDF
quoteUrl += 'id=' + quoteId;
quoteUrl += '&headerHeight=197&footerHeight=10';
quoteUrl += '&summlid=' + quoteTemplateId;
//call the quote url
PageReference pageRef = new PageReference(quoteUrl);
//get the quotePdf
Blob quoteBlob;
if(Test.isRunningTest()) {
quoteBlob = Blob.valueOf('Generate Pdf');
} else {
quoteBlob = pageRef.getContentAsPDF();
}
//initialze the QuoteDocument to hold the quote pdf for insertion
QuoteDocument quoteDoc = new QuoteDocument();
quoteDoc.Document = quoteBlob;
quoteDoc.QuoteId = quoteId;
lstQuoteDoc.add(quoteDoc);
}
}
if(!lstQuoteDoc.isEmpty() && lstQuoteDoc.size() > 0) {
Database.insert(lstQuoteDoc);
}
}
}`
測試 Class
`@istest
private class generateQuotePdfDocumentTest {
@testSetup
static void setup() {
Product2 product = new Product2();
product.Name = 'Test Product ';
product.ProductCode = '123';
product.IsActive = true;
insert product;
PricebookEntry pbe = new PricebookEntry();
pbe.Pricebook2Id = Test.getStandardPricebookId();
pbe.Product2Id = product.Id;
pbe.IsActive = true;
pbe.UnitPrice = 10;
insert pbe;
Opportunity op = new Opportunity();
op.Name = 'Test';
op.Type = 'Value Proposition';
op.Amount= 1200;
op.CloseDate = Date.today().addDays(2);
op.StageName = 'Created';
insert op;
Quote quote = new Quote();
quote.OpportunityId = op.Id;
quote.Name = 'TestQuote';
quote.ExpirationDate = Date.today().addDays(5);
quote.Status = 'Draft';
quote.Pricebook2Id = Test.getStandardPricebookId();
insert quote;
QuoteLineItem qli = new QuoteLineItem();
qli.QuoteId = quote.Id;
qli.Quantity = 2;
qli.PricebookEntryId = pbe.Id;
qli.UnitPrice = 20;
insert qli;
}
@isTest
static void generateQuotePdfTest() {
Quote quote = [SELECT Id, Status FROM Quote LIMIT 1];
quote.Status = 'Draft';
update quote;
}
}`
在我嘗試部署到生產環境時,我意識到我的代碼覆蓋率是 0。所以我正在嘗試學習如何解決這個問題。
您沒有在測試方法中調用代碼。
對不起,我的電話,但類似
Test.startTest;
Generatequotepfddpcument.createquote(new list<id>{quote.id};
Test.StopTest;
您如何在 class“CreateQuote”中調用此可調用方法? 我想您在測試 class 中所做的更新沒有觸發該可調用方法,因此覆蓋率為 0。 嘗試進行更新,以便條件匹配您的測試 class 以觸發可調用方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.