[英]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.