首页 > 解决方案 > Apex - 测试批处理类执行方法未覆盖代码覆盖率

问题描述

批处理顶点类不覆盖执行方法

在此处输入图像描述

批处理 Apex 类:试图覆盖执行方法,但未在上图中覆盖。这个批次类是聚合结果。请建议我如何覆盖这个批次类 如果状态基于过滤器,它正在处理订单的搜索结果,然后在执行方法中它将聚合与其相关的所有订单的履行 ID 的值。根据他们执行的订单状态。

global class UpdateOrderIntegrationStatus_Batch implements 
   Database.Batchable<AggregateResult>, Database.Stateful{

String status_filter = 'Waiting On Prior Order';    
String query = 'select count(Id) cnt, Fulfillment__c from Apttus_Config2__Order__c'
    +' where Fulfillment__c <> null and Order_Integration_Status__c = \''+status_filter + '\''
    +' group by Fulfillment__c '
    +' limit 50000';


public UpdateOrderIntegrationStatus_Batch(){}
    
public UpdateOrderIntegrationStatus_Batch(string q){
    query = q;
}

global Iterable<AggregateResult> start(Database.BatchableContext BC){
    //system.debug('>>>> query : ' + query)
    return new AggregateResultIterable(query);        
}

global void execute(Database.BatchableContext BC, List<sobject> results){
    set<Id> fufillmentIds = new set<Id>();
    for(Sobject sObj:results){
        AggregateResult ar = (AggregateResult)sObj;             
        fufillmentIds.add((Id) ar.get('Fulfillment__c'));            
    }

    List<Contract> fulfillments = [select id,(select Id, Order_Integration_Status__c from Orders__r order by Name asc) from Contract where id IN:fufillmentIds];        
    
    List<Apttus_Config2__Order__c> orderToUpdate = new List<Apttus_Config2__Order__c>();
    String priorOrderIntegrationStatus = '';
    for(Contract fulfillmentObj: fulfillments){
        priorOrderIntegrationStatus = '';
        for(Apttus_Config2__Order__c order: fulfillmentObj.Orders__r){                                
            
            if(order.Order_Integration_Status__c == 'Processed'){                    
                priorOrderIntegrationStatus = order.Order_Integration_Status__c;
            }
            else if(order.Order_Integration_Status__c == 'Error'){
                break;
            }
            else if(order.Order_Integration_Status__c == status_filter && priorOrderIntegrationStatus == 'Processed' ){                                        
                order.Order_Integration_Status__c = 'Ready';
                orderToUpdate.add(order);
                priorOrderIntegrationStatus = order.Order_Integration_Status__c;
                break;
            }
            else{
                priorOrderIntegrationStatus = order.Order_Integration_Status__c; //For other statuses like Ready, Not Ready, Pending etc.
                continue;
            }                
        }
    }
    if(orderToUpdate <> null && orderToUpdate.size() > 0){
        Database.update(orderToUpdate, false);
    }        
}
global void finish(Database.BatchableContext BC){
    System.debug('UpdateOrderIntegrationStatus_Batch Finished');
}        
}

测试批次类:

@isTest
  public class UpdateOrderIntegrationStatus_Batch_Test {

      public static testMethod void testBatch() {
   Test.StartTest();
   Account acc =APTS_BvdUtility.createAccount();
   Contact con = APTS_BvdUtility.createContact(acc.Id);
   Apttus_Config2__AccountLocation__c acclocation = APTS_BvdUtility.createAccountLocation('Test Loc', acc.Id, con.Id);
   Opportunity opp = APTS_BvdUtility.createOpportunity('Test Opp ', acc.Id, con.Id);
   Apttus_Config2__PriceList__c priceList = APTS_BvdUtility.createPriceList('Test PriceBook') ;
   Apttus_Proposal__Proposal__c quote = APTS_BvdUtility.createQuote(acc, opp, priceList.Id, 'quoteName');
   
   Apttus_Config2__Order__c newOrder = new Apttus_Config2__Order__c();
    newOrder.Apttus_QPConfig__ProposalId__c = quote.Id;
    newOrder.Apttus_Config2__Status__c = 'Pending';
    newOrder.AC_Billing_Street_1__c = '234';
    newOrder.AC_Shipping_Street_1__c = '234';
    newOrder.Ultimate_Parent_Account_ID__c = quote.Apttus_Proposal__Account__c;
    newOrder.Apttus_Config2__BillToAccountId__c = quote.Apttus_Proposal__Account__c;
    newOrder.Apttus_Config2__ShipToAccountId__c = quote.Apttus_Proposal__Account__c;
    newOrder.Apttus_Config2__RelatedOpportunityId__c = quote.Apttus_Proposal__Opportunity__c;
    newOrder.Apttus_Config2__OrderStartDate__c = quote.Apttus_Proposal__ExpectedStartDate__c;
    newOrder.Apttus_Config2__OrderEndDate__c = quote.Apttus_Proposal__ExpectedEndDate__c;
    newOrder.Apttus_Config2__SoldToAccountId__c = quote.Apttus_Proposal__Account__c;
    newOrder.Apttus_Config2__PriceListId__c = quote.Apttus_QPConfig__PriceListId__c;
    newOrder.Apttus_Config2__Type__c = quote.Apttus_QPConfig__ABOType__c;
    newOrder.Language__c = 'English';
    newOrder.Billing_Cycle__c = 'Annual';
    newOrder.Detailed_Invoice__c = true;
    newOrder.Bill_To_Contracting_Party__c = 'Test123';
    newOrder.Ship_To_Contracting_Party__c = 'Test123';
    newOrder.Bill_To_Location__c = acclocation.Id;
    newOrder.Ship_To_Location__c = acclocation.id;
    newOrder.Bill_To_Ultimate_Parent_Account_ID__c = quote.Apttus_Proposal__Account__c;
    newOrder.Ship_To_Ultimate_Parent_Account_ID__c = quote.Apttus_Proposal__Account__c;
    newOrder.Apttus_Config2__ActivatedDate__c = System.today();
    newOrder.Apttus_Config2__OrderDate__c = System.today();
    newOrder.CurrencyIsoCode = quote.CurrencyIsoCode;
   newOrder.Apttus_Config2__ActivatedDate__c = System.Date.today();
   newOrder.Order_Integration_Status__c='Waiting On Prior Order';
    insert newOrder;
   
    String testseqname = 'CONTRACT_NUMBER';
    double testseqnumber = 1234;
    Sequence_Number__c sn = new Sequence_Number__c(Name = testseqname, Next_Sequence_Number__c = testseqnumber);
    insert sn;
  
   List<SObject> contracts = new List<Contract>();      
   
   Contract fulfillment =  new Contract();
    fulfillment.Fulfillment_Total__c = 6000;
    fulfillment.AccountId = acc.Id;
    fulfillment.Opportunity__c = opp.Id;
    fulfillment.Renewal_Opportunity__c = opp.Id;
    fulfillment.CurrencyIsoCode = newOrder.CurrencyIsoCode;
    fulfillment.CustomerSignedDate = system.today();
    fulfillment.Status = 'Client Signed';
    fulfillment.End_Date__c = newOrder.Apttus_Config2__OrderEndDate__c;
    fulfillment.StartDate = newOrder.Apttus_Config2__OrderStartDate__c;
    fulfillment.Latest_Order__c = newOrder.Id;
    fulfillment.Billing_Integration_Status__c = 'Ready';
    fulfillment.RecordTypeId = System.Label.Sales_Contract_RecordTypeID;
    fulfillment.Original_Order_Submit_Date__c = newOrder.Apttus_Config2__ActivatedDate__c.date();
    fulfillment.BusinessUnit__c = 'Bureau van Dijk Electronic Publishing Inc.';
    fulfillment.Contract_Sequence_Number__c = 993360;      
 //  insert fulfillment;
       contracts.add(fulfillment);
   insert contracts;
   List<Contract> contrList = [select id,(select Id, Order_Integration_Status__c from Orders__r order by Name asc) from Contract where id =:contracts[0].Id];
   newOrder.Order_Integration_Status__c='Processed';
   update newOrder;
   String status_filter = 'Waiting On Prior Order';    
        String query = 'select count(Id) cnt, Fulfillment__c from Apttus_Config2__Order__c'
    +' where Fulfillment__c <> null and Order_Integration_Status__c = \''+status_filter + '\''
    +' group by Fulfillment__c '
    +' limit 50000';
   /* String query =  'select id,(select Id, Order_Integration_Status__c from Orders__r order 
     by Name asc) from Contract';        
    String query = 'select count(Id) cnt, Fulfillment__c from Apttus_Config2__Order__c'
    +' where Fulfillment__c =\''+contrList[0].Id +'\' and Order_Integration_Status__c = 
   \''+status_filter + '\''
    +' group by Fulfillment__c '
    +' limit 50000';
   */


 
 UpdateOrderIntegrationStatus_Batch obj = new UpdateOrderIntegrationStatus_Batch();
 UpdateOrderIntegrationStatus_Batch obj1 = new UpdateOrderIntegrationStatus_Batch(query);  
//   obj1.execute(BC, contracts);
ID batchprocessid = Database.executeBatch(obj);
ID batchprocessid1 = Database.executeBatch(obj1,10);
  
   List<Apttus_Config2__Order__c> orders =[select Id, 
Order_Integration_Status__c,Fulfillment__c from Apttus_Config2__Order__c where 
  Fulfillment__c=:contracts[0].Id];
   
       for(Apttus_Config2__Order__c ord : orders){
        system.assertEquals('Processed', ord.Order_Integration_Status__c);
  
   }
  
   Test.StopTest();
  }
 }

标签: testingapex

解决方案


推荐阅读