Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099

Как мокать то, на что нет ссылки?

17.12.2017, 17:04. Показов 1216. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть сервлет
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class RegistrationServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        User userInfo = collectUserBeanParameters(req);
        RegistrationValidator validator = new RegistrationValidator();
        validator.validateUserInfo(userInfo);
 
        List<String> errorMessages = validator.getErrorMessages();
 
        HttpSession session = req.getSession();
        Captcha captcha = (Captcha) session.getAttribute("simpleCaptcha");
        req.setCharacterEncoding("UTF-8");
 
        String answer = req.getParameter("answer");
        if (!captcha.isCorrect(answer)) {
            errorMessages.add("Captcha is wrong!");
        }
 
        if (errorMessages.isEmpty()) {
            resp.sendRedirect("/");
        } else {
            req.setAttribute("userInfo", userInfo);
            req.setAttribute("errorMessages", errorMessages);
            req.getRequestDispatcher("/tabs/registration.jsp").forward(req, resp);
        }
 
    }
 
    private User collectUserBeanParameters(HttpServletRequest req) {
        String username = req.getParameter("username");
        String name = req.getParameter("name");
        String surname = req.getParameter("surname");
 
        String email = req.getParameter("email");
        String password = req.getParameter("password");
        String confirmPassword = req.getParameter("password_confirm");
        boolean interestedInNewsFeed = Boolean.parseBoolean(req.getParameter("news_feed"));
 
        return new User(username, name, surname, email, password, confirmPassword, interestedInNewsFeed);
    }
}
Пытаюсь писать к нему тесты
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class RegistrationServletTest {
    @Test
    public void testServlet() throws IOException, ServletException {
        HttpServletRequest req = mock(HttpServletRequest.class);
        HttpServletResponse resp = mock(HttpServletResponse.class);
 
        when(req.getParameter("username")).thenReturn("new_user");
        when(req.getParameter("name")).thenReturn("Vasya");
        when(req.getParameter("surname")).thenReturn("Pupkin");
        when(req.getParameter("email")).thenReturn("artmalchik@gmail.com");
        when(req.getParameter("password")).thenReturn("qwerty1234");
        when(req.getParameter("confirm_password")).thenReturn("qwerty1234");
        when(req.getParameter("news_feed")).thenReturn(String.valueOf(true));
        when(req.getParameter("answer")).thenReturn(anyString());
 
        new RegistrationServlet().doPost(req, resp);
        verify(req, calls(1)).getParameter("username");
    }
}
Тест фейлится, потому что на строке
Java
1
HttpSession session = req.getSession();
летит null.

req.getSession() можно как-то замокать?

Добавлено через 9 минут
Жестко туплю, замокать можно сессию. А как капчу потом замокать, которая возвращается в сессии?

Добавлено через 2 минуты
То есть у меня
Java
1
when(req.getSession()).thenReturn(mock(HttpSession.class));
А внутри самого doPost()
Java
1
Captcha captcha = (Captcha) session.getAttribute("simpleCaptcha");
Как мне написать "когда у замоканной сессии вызывается getAttribute("simpleCaptcha") тогда верни мок капчи". Я же ссылку не имею на сессию и в переменную положить ее не могу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2017, 17:04
Ответы с готовыми решениями:

Как узнать, проиндексированы ссылки или нет
Здравствуйте. Купил ссылок через биржу на нескольких сайтах. Как мне узнать, проиндексировал их яндекс или нет? Спасибо за внимание.

Как сделать что если нет данных в таблице, чтобы шаблон этой самой таблице не выводился а писалось что данных в таблице нет
В общем проблема такая, есть админка где выводится список жалоб которые без ответа, когда они есть то всё нормально список выводится и с...

Как понять, что можно называть API, а что нет?
Уважаемые разработчики, помогите вместе разобраться, что можно назвать API, а что нельзя? Мы знаем, что API - это, грубо говоря, набор...

2
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.12.2017, 20:36
Цитата Сообщение от Artmal Посмотреть сообщение
и в переменную положить ее не могу.
почему?
1
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
17.12.2017, 21:52  [ТС]
Вроде понял
Java
1
2
3
        HttpSession session = mock(HttpSession.class);
        when(req.getSession()).thenReturn(session);
        when(session.getAttribute("captcha")).thenReturn(mock(Captcha.class));
Остался еще один вопрос. Есть сервлет, у него есть зависимость, которая в init() вытягивается из контекста. Как замокать getServletContext.getAttribute("registra tionValidator")? Тут я точно не имею ссылки и не могу создать в тесте
Java
1
2
3
4
5
6
7
8
9
10
public class RegistrationServlet extends HttpServlet {
    private RegistrationValidator validator;
 
    @Override
    public void init() {
        validator = (RegistrationValidator) getServletContext().getAttribute("registrationValidator");
    }
 
    ...
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2017, 21:52
Помогаю со студенческими работами здесь

На localhost сайт отображается адекватно, а на хостах в локалке - нет рисунков, кнопок и меню как ссылки
Здравствуйте! На Windows server 2003 поднял web-server в связке apache+php+mysql (не денвер, все по-отдельности). Локально все прекрасно...

Как сделать, что бы ссылки открывались не просто страницами, а фреймами?
Здравствуйте! Есть обычная главная страница, все остальные страницы с фреймами. На главной ссылки на разделы. Как сделать что бы эти...

Как проверить на сайте ссылки , что ведут на медиа файлы ?
Есть такая задача: проверить на сайте ссылки, что ведут на медиа файлы flv и mp4. Файлы расположены на удаленных серверах, у партренов. ...

Как узнать, что в коллекции ничего нет?
В какой-то момент коллекция оказывается абсолютно пустой. Не то чтобы в ней нулевые элементы, а их там вообще нет. Как запросить состояние...

Как сообщить гуглу что вирусов нет
Хостинг провайдера нашего несколько раз взламывали и с сайта грузились трояны. С этим давно разобрались но гугл никак не успокоится и даже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru