[SalesForce] Cover list.Size() If condition in apex test

I have a trigger:

trigger UnitTrigger_BeforeU on Unit__c (before update) 
{
List<Unit__c> units= [select id, 
                            Verkocht__c, 
                            Bouwwaarde_appartement__c,
                            BTW__c,
                            Project__c,
                            Bouwwaarde_onderdelen__c,
                            Type__c,
                            Genereer_facturatieschijven__c
                            From Unit__c
                            Where Id IN :Trigger.newMap.keySet()];

List <Onderdeel__c> onderdelen = [Select id, Bouwwaarde__c, Grondwaarde__c, Unit__c from Onderdeel__c Where Unit__c IN:Trigger.newMap.keySet()];     
List<Onderdeel__c> onderdelenToUpdate = new List<Onderdeel__c>{};                     
decimal totaalBouwwaardeOnderdeelVoorUpdate = 0;
decimal totaalGrondwaardeOnderdeelVoorUpdate = 0;

For (Unit__c unit: units) 
{
  For(Unit__c u: Trigger.new)
  {
      if(unit.Id == u.Id)
      {
          if(u.Type__c == 'Standaard')
          {
              if(u.Verkocht__c == true && u.Genereer_facturatieschijven__c == true)
              {
                    if (onderdelen.Size() > 0) 
                    {
                        // Totaal bouwwaarde berekenen   
                        for(Onderdeel__c onderdeel: onderdelen)
                        {
                              if(onderdeel.Unit__c == u.id)
                              {
                                  totaalBouwwaardeOnderdeelVoorUpdate += onderdeel.Bouwwaarde__c; 
                                  totaalGrondwaardeOnderdeelVoorUpdate += onderdeel.Grondwaarde__c;
                                  onderdeel.Verkocht__c = true;
                                  onderdeel.Facturatieschijf_aangemaakt__c = true;
                                  onderdelenToUpdate.add(onderdeel);
                              }   
                        }
                        u.Bouwwaarde_Onderdelen__c = totaalBouwwaardeOnderdeelVoorUpdate;
                        u.Grondwaarde_onderdelen__c = totaalGrondwaardeOnderdeelVoorUpdate;
                    }
              }
          }
      }
  }
  update onderdelenToUpdate;
}

}

where this part is marked in red – no coverage

if (onderdelen.Size() > 0) 
                {
                    // Totaal bouwwaarde berekenen   
                    for(Onderdeel__c onderdeel: onderdelen)
                    {
                          if(onderdeel.Unit__c == u.id)
                          {
                              totaalBouwwaardeOnderdeelVoorUpdate += onderdeel.Bouwwaarde__c; 
                              totaalGrondwaardeOnderdeelVoorUpdate += onderdeel.Grondwaarde__c;
                              onderdeel.Verkocht__c = true;
                              onderdeel.Facturatieschijf_aangemaakt__c = true;
                              onderdelenToUpdate.add(onderdeel);
                          }   
                    }
                    u.Bouwwaarde_Onderdelen__c = totaalBouwwaardeOnderdeelVoorUpdate;
                    u.Grondwaarde_onderdelen__c = totaalGrondwaardeOnderdeelVoorUpdate;
                }

This is my test class:

@isTest
private class UnitTrigger_BeforeUTest 
{
static testMethod void UnitTrigger_UnitWithParts() 
{
       Test.StartTest();

       //Insert project
       Project__c project = new Project__c(Name='test');
       insert project;

       //Insert standaard facturatieschijven voor unit
       Standaard_facturatie_schijf__c SFUnit = new Standaard_Facturatie_schijf__c(name='test',
                                                               Project__c = project.id,
                                                               Percentage_schijf__c = 10,
                                                               Type__c = 'Unit');
       insert SFUnit;

       //Insert standaard facturatieschijven voor unit
       Standaard_facturatie_schijf__c SFUnit2 = new Standaard_Facturatie_schijf__c(name='test',
                                                               Project__c = project.id,
                                                               Percentage_schijf__c = 90,
                                                               Type__c = 'Unit');
       insert SFUnit2;


       //Insert unit
       Unit__c unit = new unit__c(name='test',
                                       Type__c ='Standaard',
                                       Initi_le_VK_Bouw__c=100,
                                       Initi_le_VK_Grond__c=300,
                                       BTW__c = 21,
                                       Project__c=project.id,
                                       Bouwwaarde_appartement__c = 200000,
                                 Bouwwaarde_Onderdelen__c = 10,
                                 Grondwaarde_onderdelen__c = 10);
       insert unit;                                



    //Insert onderdeel
       Onderdeel__c onderdeel = new onderdeel__c (name='test',
                                                   Type__c = 'test',
                                                   Project__c =project.id,
                                                   Bouwwaarde__c = 10000,
                                                   Grondwaarde__c = 10000, 
                                                   Unit__c = unit.Id
                                                 ); 
    insert onderdeel;

    List <Onderdeel__c> onderdelen = [Select id, Bouwwaarde__c, Grondwaarde__c, Unit__c from Onderdeel__c Where Unit__c = :unit.id];  


    update unit; 
    update onderdeel;



    Test.StopTest();
}

static testMethod void UnitTrigger_UnitWithNoParts() 
{
       Test.StartTest();

       //Insert project
       Project__c project = new Project__c(Name='test');
       insert project;

       //Insert standaard facturatieschijven voor unit
       Standaard_facturatie_schijf__c SFUnit = new Standaard_Facturatie_schijf__c(name='test',
                                                               Project__c = project.id,
                                                               Percentage_schijf__c = 10,
                                                               Type__c = 'Unit');
       insert SFUnit;

       //Insert standaard facturatieschijven voor unit
       Standaard_facturatie_schijf__c SFUnit2 = new Standaard_Facturatie_schijf__c(name='test',
                                                               Project__c = project.id,
                                                               Percentage_schijf__c = 90,
                                                               Type__c = 'Unit');
       insert SFUnit2;

       //Insert unit
       Unit__c unit = new unit__c(name='test',
                                       Type__c ='Standaard',
                                       Initi_le_VK_Bouw__c=100,
                                       Initi_le_VK_Grond__c=300,
                                       BTW__c = 21,
                                       Project__c=project.id,
                                       Bouwwaarde_appartement__c = 200000,
                                 Bouwwaarde_Onderdelen__c = 10,
                                 Grondwaarde_onderdelen__c = 10);
       insert unit;                                


    //Insert onderdeel
       Onderdeel__c onderdeel = new onderdeel__c (name='test',
                                                   Type__c = 'test',
                                                   Project__c =project.id,
                                                   Bouwwaarde__c = 10000,
                                                   Grondwaarde__c = 10000 
                                                                         ); 
    insert onderdeel;

    List <Onderdeel__c> onderdelen = [Select id, Bouwwaarde__c, Grondwaarde__c, Unit__c from Onderdeel__c Where Unit__c = :unit.id];      
    update unit;  
    update onderdeel;      
    Test.StopTest();
}
}

As you can see I created 2 methods, one where the "onderdelen.Size() > 0" condition is satisfied (in test "UnitTrigger_UnitWithParts")

and 1 method where "onderdelen.Size() > 0" is not satisfied (in test UnitTrigger_UnitWithNoParts())

For some reason I cannot get passed this "onderdelen.Size() > 0" line. I only get 56% coverage.

Can someone point me in the right direction ?

Best Answer

As suggested by Rahul, would recommend to add asserts in the test class to verify the data that is inserted/updated.

To answer, looking at the code, I assume that the line above if(onderdelen.Size() > 0) is not evaluating to true. Hence the below and subsequent lines are not getting executed.

The line I am referring to is

if(u.Verkocht__c == true && u.Genereer_facturatieschijven__c == true)

As I don't see where these fields (Verkocht__c & Genereer_facturatieschijven__c ) are set in the test class