Немного не понимаю, как правильно написать тест. Сейчас покрытие 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;} Хелп!
Немного не понимаю, как правильно написать тест. Сейчас покрытие 75%, но есть также ошибка [b]System.NullPointerException: Attempt to de-reference a null object[/b]. Сам контроллер: [code] 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(); } } [/code] Тест для него [code] 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); [/code] Что делает контроллер? При нажатии на кнопку (List button) он выдает страницу со всеми записями, которые отфильтрованы в соответствии с листвью. Я не знаю, как через тест вызвать ретёрн [b]ApexPages.StandardSetController setCon {get;set;}[/b] Хелп!
У вас переменная listViewUrl равна null, потому что в тесте вы нигде не дабавляете для страницы параметр с именем vfRetURLInSFX и падает System.NullPointerException: Attempt to de-reference a null object, когда вы пытаетесь сделать substring для null в 11 cстроке.
Параметр в тесте можно добавить к текущей странице вот так
ApexPages.currentPage().getParameters().put('vfRetURLInSFX', <значение>);
У вас переменная listViewUrl равна null, потому что в тесте вы нигде не дабавляете для страницы параметр с именем vfRetURLInSFX и падает System.NullPointerException: Attempt to de-reference a null object, когда вы пытаетесь сделать substring для null в 11 cстроке. Параметр в тесте можно добавить к текущей странице вот так ApexPages.currentPage().getParameters().put('vfRetURLInSFX', <значение>);
Да, спасибо) Я сделала :)
Да, спасибо) Я сделала :)