powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + Spring Testing: отключить google captcha для тестирования
10 сообщений из 10, страница 1 из 1
Java + Spring Testing: отключить google captcha для тестирования
    #39731094
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Тестирую форму добавления нового пользователя через Spring Testing. На форме есть google captcha.


Как сымитировать проверку captcha или как спрингу указать, чтобы он отключал проверку captcha при тестировании?
Возможно нужно указать какое проперти в файле окружения?

Сам тест:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    @Test
    public void addUserTest() throws Exception {
        this.mockMvc.perform(post("/registration")
                            .param("username", "user3")
                            .param("password", "333")
                            .param("password2", "333")
                            .with(csrf()))
                    .andDo(print());

        this.mockMvc.perform(formLogin().user("user3").password("333"))
                .andDo(print())
                .andExpect(status().is3xxRedirection())
                .andExpect(redirectedUrl("/login"));
    }



Ошибка:авторMockHttpServletResponse:
Status = 400
Error message = Required String parameter 'g-recaptcha-response' is not present
...
Рейтинг: 0 / 0
Java + Spring Testing: отключить google captcha для тестирования
    #39731117
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. твой бэк или чо там у тебя требует поле рекапча с каким то велью а тебе вложить нечего - как вариант запускай бэк с тестовым профилем где все эти капчи игнорятся ну или есть значение суперкапчи. очевидно ж что тебя бэк футболит. иначе ничего не сделаешь. или создавай профиль и делай код, или допиши тест где предварительно будет получаться значение капчи (один фиг тестовый профиль я думаю) ну или не тестируй тот код где есть валидация капчи а иди на следующий уровень ))
...
Рейтинг: 0 / 0
Java + Spring Testing: отключить google captcha для тестирования
    #39731119
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...либо еще один вариант --- мокаешь тот код который валидирует капчу -- и она всегда возвращает тру )) это имхо самый верный вариант.
...
Рейтинг: 0 / 0
Java + Spring Testing: отключить google captcha для тестирования
    #39731125
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как мокается этот код?andreykaT...либо еще один вариант --- мокаешь тот код который валидирует капчу -- и она всегда возвращает тру )) это имхо самый верный вариант.

Сам код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
        String url = String.format(CAPTCHA_URL, secret, captchaResponse);
        CaptureResponseDTO captureResponseDTO = restTemplate.postForObject(url, Collections.emptyList(), CaptureResponseDTO.class);

        if (!captureResponseDTO.isSuccess()) {
            model.addAttribute("captchaError", "Fill the captcha");
            return "registration";
        }

        return "redirect:/login";
...
Рейтинг: 0 / 0
Java + Spring Testing: отключить google captcha для тестирования
    #39731198
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мокай вот этот вызов:
restTemplate.postForObject(url, Collections.emptyList(), CaptureResponseDTO.class);

Который тебе будет возвращать captureResponseDTO

Где изСакцесс будет стоять тру.

Ну как то так..

Пишу не с компа...

гугли что-то типа mock methods junit или mockito - это то что тебе нужно.

Подозреваю, у тебя ресттемплейт это даже не бин (из куска когда неясно) так что даже мокбины тебе пробрасывать в конфиге кажется, и не надо.
...
Рейтинг: 0 / 0
Java + Spring Testing: отключить google captcha для тестирования
    #39731483
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гугловскую рекапчу можно включить в девелоп режим.
...
Рейтинг: 0 / 0
Java + Spring Testing: отключить google captcha для тестирования
    #39732053
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу найти ничего про этот режим.
Не подскажите где смотреть?HettГугловскую рекапчу можно включить в девелоп режим.
...
Рейтинг: 0 / 0
Java + Spring Testing: отключить google captcha для тестирования
    #39732156
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MolasarНе могу найти ничего про этот режим.
Не подскажите где смотреть?HettГугловскую рекапчу можно включить в девелоп режим.

https://developers.google.com/recaptcha/docs/faq
...
Рейтинг: 0 / 0
Java + Spring Testing: отключить google captcha для тестирования
    #39732484
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я мокаю метод isSuccess() у объекта response:
Код: java
1.
2.
3.
4.
CaptureResponse response = mock(CaptureResponse.class);
        when(response.isSuccess()).thenReturn(true);

        Assert.assertTrue(response.isSuccess());


Тест проходит Ок!
Но когда добавляю пользователя, я снова попадаю на форму registration атрибутом "Fill the captcha", т.е. все равно почему то !response.isSuccess()

Полный код:

RegistrationController.java
Код: 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.
@Controller
public class RegistrationController {
    private final static String CAPTCHA_URL = "https://www.google.com/recaptcha/api/siteverify?secret=%s&response=%s";

    @Value("${recaptcha.secret}")
    private String secret;

    private RestTemplate restTemplate;

    public RegistrationController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/registration")
    public String registration() {
        return "registration";
    }

    @PostMapping("/registration")
    public String addUser(@RequestParam("g-recaptcha-response") String captchaResponse,
                          @Valid User user,
                          Model model) {
        String url = String.format(CAPTCHA_URL, secret, captchaResponse);
        CaptureResponse response = restTemplate.postForObject(url, Collections.emptyList(), CaptureResponse.class);
        if (!response.isSuccess()) {
            model.addAttribute("captchaError", "Fill the captcha");
            return "registration";
        }

        return "redirect:/login";
    }


RegistrationControllerTest.java
Код: 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.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@TestPropertySource("/application-test.properties")
public class MainControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void userRegistrationTest() throws Exception {
        CaptureResponse response = mock(CaptureResponse.class);
        when(response.isSuccess()).thenReturn(true);

        Assert.assertTrue(response.isSuccess());

        this.mockMvc.perform(post("/registration")
                        .param("username", "user3")
                        .param("password", "333")
                        .param("password2", "333")
                        .param("g-recaptcha-response", "")
                        .with(csrf()))
                .andDo(print());

        this.mockMvc.perform(formLogin().user("user3").password("333"))
                .andDo(print())
                .andExpect(status().is3xxRedirection())
                .andExpect(redirectedUrl("/"));
    }
}



andreykaTМокай вот этот вызов:
restTemplate.postForObject(url, Collections.emptyList(), CaptureResponseDTO.class);

Который тебе будет возвращать captureResponseDTO

Где изСакцесс будет стоять тру.

Ну как то так..

Пишу не с компа...

гугли что-то типа mock methods junit или mockito - это то что тебе нужно.

Подозреваю, у тебя ресттемплейт это даже не бин (из куска когда неясно) так что даже мокбины тебе пробрасывать в конфиге кажется, и не надо.
...
Рейтинг: 0 / 0
Java + Spring Testing: отключить google captcha для тестирования
    #39732759
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос решил так:
Код: 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.
@RunWith(SpringRunner.class)
@SpringBootTest
public class MappingTest {
    @MockBean
    private RestTemplate restTemplate;
    
    private CaptureResponse response = mock(CaptureResponse.class);

    @Test
    public void userRegistrationTest() throws Exception {
        Mockito.doReturn(response)
                .when(restTemplate)
                .postForObject(
                        ArgumentMatchers.anyString(),
                        ArgumentMatchers.any(),
                        ArgumentMatchers.any()
                );

        Mockito.doReturn(true)
                .when(response)
                .isSuccess();

        this.mockMvc.perform(post("/registration")
                .param("username", "user3")
                .param("password", "333")
                .param("password2", "333")
                .param("g-recaptcha-response", "")
                .with(csrf()))
                .andDo(print());

        this.mockMvc.perform(formLogin().user("user3").password("333"))
                .andDo(print())
                .andExpect(status().is3xxRedirection())
                .andExpect(redirectedUrl("/"));
    }
}
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + Spring Testing: отключить google captcha для тестирования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]