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
As I don't see where these fields
(Verkocht__c & Genereer_facturatieschijven__c )
are set in the test class