繁体   English   中英

如何获得 Salesforce 中的代码覆盖率?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM