You need to sign in to do that
Don't have an account?
Iqbal Hossain
For loop and nested IF code coverage
Hi, I could not Apex test coverage to 100%. At loop nested IF was uncovered. The total coverage is 92%.
Apex Class:
Test Class:
Please help me how can I complete it to 100%?
Apex Class:
public class Income{ private String employeeSortOrder; public String currentUserId{get;set;} public User currentUser{get;set;} public Income() { currentUserId = UserInfo.getUserId(); currentUser = Database.query('SELECT id, Name, EmployeeNumber From User Where id=:currentUserId'); this.employeeSortOrder = 'Name ASC'; } public List<Employee__c> getEmployees(){ List<Employee__c> employees = Database.query( 'SELECT Name, Alias__c, EmployeeCode__c, Department__c, Status__c ' + 'FROM Employee__c ' + 'ORDER BY ' + employeeSortOrder); for (Integer i = 0; i< employees.size(); i++){ //Next 2 lines was not covered! if(currentUser.EmployeeNumber==employees[i].EmployeeCode__c) { employees.remove(i); } } return employees; } //Sort by employee code public void sortByEmployeeCode() { if(employeeSortOrder == 'EmployeeCode__c ASC') { this.employeeSortOrder = 'EmployeeCode__c DESC'; } else { this.employeeSortOrder = 'EmployeeCode__c ASC'; } } //Sort by department public void sortByEmployeeDepartment() { if(employeeSortOrder == 'Department__c ASC') { this.employeeSortOrder = 'Department__c DESC'; } else { this.employeeSortOrder = 'Department__c ASC'; } } //Sort by status public void sortByEmployeeStatus() { if(employeeSortOrder == 'Status__c ASC') { this.employeeSortOrder = 'Status__c DESC'; } else { this.employeeSortOrder = 'Status__c ASC'; } } }
Test Class:
@isTest public class incom_test{ static testmethod void incom_test(){ Income i = new Income(); String result = i.currentUserId; User resultUser = i.currentUser; i.sortByEmployeeCode(); //Ascending i.sortByEmployeeCode(); //Descending i.sortByEmployeeDepartment(); //Ascending i.sortByEmployeeDepartment(); //Descending i.sortByEmployeeStatus(); //Ascending i.sortByEmployeeStatus(); //Descending } static testmethod void incom_get_employee_test(){ Income i = new Income(); User u = i.currentUser; u.EmployeeNumber = '003'; List<Employee__c> e = i.getEmployees(); System.assertEquals(9,e.size()); } }
Please help me how can I complete it to 100%?
You are not creating test data in your test class. By default, test methods do not see any data in the org, so you will have to create your own.
Just insert an Employee__c record that contains the necessary values and you will see your testcoverage go to 100%.
Also, please take a look at the Apex Testing Best Practices for more information:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_best_practices.htm
Hope this helps!
Happy coding!
Regards,
Martijn Schwärzer
All Answers
You are not creating test data in your test class. By default, test methods do not see any data in the org, so you will have to create your own.
Just insert an Employee__c record that contains the necessary values and you will see your testcoverage go to 100%.
Also, please take a look at the Apex Testing Best Practices for more information:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_best_practices.htm
Hope this helps!
Happy coding!
Regards,
Martijn Schwärzer
Try this:
always remember to crear you own data set for testing. Great job including assertion statements! I would also recomend using the test.startTest() and test.StopTest() methods too.