Немного не понимаю, как правильно написать тест. Сейчас покрытие 75%, но есть также ошибка System.NullPointerException: Attempt to de-reference a null object. Сам контроллер:
public class VFController {
public VFController(ApexPages.StandardSetController setCon){}
public ApexPages.StandardSetController setCon {
get {
if(setCon == null) {
setCon = new ApexPages.StandardSetController(Database.getQueryLocator(
[SELECT Id, Title__c FROM Tool__c]));
}
String listViewUrl = ApexPages.currentPage().getParameters().get('vfRetURLInSFX');
String listViewId = listViewUrl.substringAfter('filterName=');
//следующие 3 строки не покрываются тестом:
setCon.setPageSize(2000);
setCon.setFilterId(listViewId);
return setCon;
}
set;
} public List<Tool__c> getTools() {
return (List<Tool__c>) setCon.getRecords();
}
}
Tool__c tool = new Tool__c(Name = 'Test', Title__c = 'Title');
insert tool;
List<Tool__c> tools = [SELECT Id, Title__c FROM Tool__c];
Test.startTest();
Test.setCurrentPage(Page.VfPage);
ApexPages.StandardSetController standardSetController = new ApexPages.StandardSetController(tools);
standardSetController.setSelected(tools);
VFController controller = new VFController(standardSetController);
Test.stopTest();System.assertEquals('Test', controller.getTools()[0].Name);
Что делает контроллер? При нажатии на кнопку (List button) он выдает страницу со всеми записями, которые отфильтрованы в соответствии с листвью. Я не знаю, как через тест вызвать ретёрн ApexPages.StandardSetController setCon {get;set;} Хелп!
У вас переменная listViewUrl равна null, потому что в тесте вы нигде не дабавляете для страницы параметр с именем vfRetURLInSFX и падает System.NullPointerException: Attempt to de-reference a null object, когда вы пытаетесь сделать substring для null в 11 cстроке.
Параметр в тесте можно добавить к текущей странице вот так
ApexPages.currentPage().getParameters().put('vfRetURLInSFX', <значение>);
Да, спасибо) Я сделала :)