function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Andrew AldisAndrew Aldis 

Test Class System.QueryException List has no rows for assignment to SObject

I am trying to write a test class for for the class below, which I had deployed to our production before, I made some little modifications ot the class to query a list of related items and put them into a select option list for a Picklist field on a VF page.  I thought it was a small change but it seems to have completely messed up my test class and I am not sure why.  I get the error: System.QueryException: List has no rows for assignment to SObject.  I'd  appreciate any assistance.
APEX CLASS 
public class RiskEditPage {

    Risk__c risk;
    PageReference pageRef = new PageReference(ApexPages.currentPage().getUrl()); 
    public List<Work_Order__c> woTemp = new List<Work_Order__c>();
    public List<SelectOption> woList {get;set;}
    public RiskEditPage(apexPages.StandardController controller){

          risk = [Select Name, Assign_To__c, OpId__c, Risk_Mitigation__r.OpId__c,  FWI_Work_Order__c, Consequence_of_Failure__c, Covered_in_SOW_Hrs__c, 
                    Custom_Development_Required__c, Description__c, Function__c, Risk_Mitigation__c, Risk_of_Failure__c,
                    Risk_Mitigation__r.Name, Signoff__c, Signoff2__c, Status__c, Strategy_to_Mitigate_Risk__c, Triggering_Action__c, Type__c, 
                    User_Impact__c, Create_Task__c, Risk_of_Failure_Score__c from Risk__c 
                    where Id = :ApexPages.currentPage().getparameters().get('id')];
 
        woTemp = [Select s.Name, s.Id, s.Status__c, s.Type__c From Work_Order__c s  where Opportunity__c = :risk.Risk_Mitigation__r.OpId__c Order By Name Asc]; 
        woList = new List<SelectOption>();            
        for(Work_Order__c temp : woTemp)
        {
            woList.add(new SelectOption(temp.Id, temp.Name+': '+temp.Type__c));
        } 
        
    }
    
    public PageReference saveRisk()
    {
        update risk;
        PageReference pageref = new PageReference('/'+risk.Risk_Mitigation__c);
        pageRef.setRedirect(true); 
            return pageRef;
    }
     
    public PageReference saveNew()
    {
        upsert risk;
        PageReference pageref = new PageReference('/apex/RiskNewPage?retURL='+risk.Risk_Mitigation__c+'&CF00N4D000000bXd5='+risk.Risk_Mitigation__r.Name+'kid=aDS4D0000004CAB&CF00N4D000000bXd5_lkid='+risk.Risk_Mitigation__c+'&retURL='+risk.Risk_Mitigation__c+'&scontrolCaching=1&sfdc.override=1'); 
        pageRef.setRedirect(true);
        return pageRef;   
    } 
    
}

TEST CLASS
@istest(seealldata=true)
public class RiskEditPageTest {
         static Risk_Mitigation__c setupServicePartner() {
        
        Risk_Mitigation__c partner = new Risk_Mitigation__c();
        partner.Name = 'test';
        partner.Client_Workbook__c = 'a9f34000000TN1F';
        insert partner;
        return partner;
    }
 static Risk__c setupServiceLineItem(final Risk_Mitigation__c partner) {
        Risk__c lineItem = new Risk__c();
        lineItem.Risk_Mitigation__c = partner.Id;
        insert lineItem;
        return lineItem;
    }
   static testmethod void deliverablesCnt_Should_SaveLineItemChanges() {
        //Given
        Risk_Mitigation__c aBasicPartner = setupServicePartner();
        Risk__c unsavedLineItem = new Risk__c();
        unsavedLineItem.Risk_Mitigation__c = aBasicPartner.Id;
        //when
      
  Test.startTest();
            Test.setCurrentPage(Page.RiskEditPage);
            RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
            //deliverablesCnt.getrisk().add(unsavedLineItem);
            PageReference pageRef = deliverablesCnt.saveRisk();
        Test.stopTest();
       
 //then
        List<Risk__c> associatedLineItems = [
            SELECT Risk_Mitigation__c
            FROM Risk__c
            WHERE Risk_Mitigation__c = :aBasicPartner.Id
        ];
        System.assertEquals(1, associatedLineItems.size(), 'The unsaved service partner line item should have been saved');
        System.assertEquals(true, pageRef.getRedirect(), 'Page should redirect');
    }
    static testmethod void deliverablesCnt_Should_SaveNewLineItemChanges() {
        //Given
        Risk_Mitigation__c aBasicPartner = setupServicePartner();
        Risk__c unsavedLineItem = new Risk__c();
        unsavedLineItem.Risk_Mitigation__c = aBasicPartner.Id;
        //when
      
  Test.startTest();
            Test.setCurrentPage(Page.RiskEditPage);
            RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
            //deliverablesCnt.getrisk().add(unsavedLineItem);
            PageReference pageRef = deliverablesCnt.saveNew();
      
        Test.stopTest();
         
       
 //then
        List<Risk__c> associatedLineItems = [
            SELECT Risk_Mitigation__c
            FROM Risk__c
            WHERE Risk_Mitigation__c = :aBasicPartner.Id
        ];
        System.assertEquals(1, associatedLineItems.size(), 'The unsaved service partner line item should have been saved');
        System.assertEquals(true, pageRef.getRedirect(), 'Page should redirect');
    }
}
Best Answer chosen by Andrew Aldis
Alain CabonAlain Cabon
Hi,

1) error: System.QueryException: List has no rows for assignment to SObject.  

     You can get the exact row of the error between the brackets normally.

2) Where have you set the parameter 'id' ?

Class: risk = [Select Name, Assign_To__c, OpId__c, Risk_Mitigation__r.OpId__c,  FWI_Work_Order__c, Consequence_of_Failure__c, Covered_in_SOW_Hrs__c, 
                    Custom_Development_Required__c, Description__c, Function__c, Risk_Mitigation__c, Risk_of_Failure__c,
                    Risk_Mitigation__r.Name, Signoff__c, Signoff2__c, Status__c, Strategy_to_Mitigate_Risk__c, Triggering_Action__c, Type__c, 
                    User_Impact__c, Create_Task__c, Risk_of_Failure_Score__c from Risk__c 
                    where Id = :ApexPages.currentPage().getparameters().get('id')];

 Test.startTest();
            Test.setCurrentPage(Page.RiskEditPage);
            RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
            //deliverablesCnt.getrisk().add(unsavedLineItem);
            // Add parameters to page URL 
            ApexPages.currentPage().getParameters().put('id',
unsavedLineItem.id );
            PageReference pageRef = deliverablesCnt.saveNew();      
  Test.stopTest();

https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_error_handling.htm

Best regards
Alain

All Answers

Alain CabonAlain Cabon
Hi,

1) error: System.QueryException: List has no rows for assignment to SObject.  

     You can get the exact row of the error between the brackets normally.

2) Where have you set the parameter 'id' ?

Class: risk = [Select Name, Assign_To__c, OpId__c, Risk_Mitigation__r.OpId__c,  FWI_Work_Order__c, Consequence_of_Failure__c, Covered_in_SOW_Hrs__c, 
                    Custom_Development_Required__c, Description__c, Function__c, Risk_Mitigation__c, Risk_of_Failure__c,
                    Risk_Mitigation__r.Name, Signoff__c, Signoff2__c, Status__c, Strategy_to_Mitigate_Risk__c, Triggering_Action__c, Type__c, 
                    User_Impact__c, Create_Task__c, Risk_of_Failure_Score__c from Risk__c 
                    where Id = :ApexPages.currentPage().getparameters().get('id')];

 Test.startTest();
            Test.setCurrentPage(Page.RiskEditPage);
            RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
            //deliverablesCnt.getrisk().add(unsavedLineItem);
            // Add parameters to page URL 
            ApexPages.currentPage().getParameters().put('id',
unsavedLineItem.id );
            PageReference pageRef = deliverablesCnt.saveNew();      
  Test.stopTest();

https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_error_handling.htm

Best regards
Alain
This was selected as the best answer
Andrew AldisAndrew Aldis
Thank you so much Alain, enjoy your best answer selection in good health.