Всем привет!
как известно , тестирование - это особая тема, а тестирование контроллеров имет свои особенности.
Тестирую один контроллер "по-простому": создаю объект-контроллер, вызываю его методы, проверяю Ассертом УРЛ, если метод делает редирект.
но у контроллера есть конструктор, в нем получается GET параметр, при его наличии делается квери и еще пару строк.
но как в конструктор "передать" GET параметр? я думаю, что это никак не получится сделать "по-простому".
нужно создавать страницу. дописал в юнит-тест следующее:
PageReference tpageRef = Page.MyPage;
Test.setCurrentPage(tpageRef);ApexPages.currentPage().getParameters().put('id', Account.id);
в надежде, что эти строки спровоцируют создание нового контроллера с передачей в конструктор параметра, но нет: покрытие не изменилось.
Как это делается "по-уму"?
Не уверен что currentPage() правильно отработает в тесте, я обычно делаю просто
PageReference tpageRef = Page.MyPage;
tpageRef.getParameters().put('id', Account.id);
спасибо, выглядит получше.
попробовал в тесте - все равно в конструкторе пустой параметр - вижу что код не проходит дальше проверки на пустоту параметра.
ApexPages.currentPage().getParameters().put('id', my_object.Id);точняк.
ApexPages.currentPage().getParameters().put('id', Acc.id);My_Controller controller = new My_Controller();
провалился в конструктор как надо.
все дело в очередности строк. я не ставил
ApexPages.currentPage().getParameters().put('id', Acc.id);перед вызовом контроллера, так как не видел прямой связи между currentPage и последующим созданием контроллера. А она есть...