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