簡體   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