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

Тестирую форму добавления нового пользователя через 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
10.11.2018, 19:00
    #39731117
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + Spring Testing: отключить google captcha для тестирования
т.е. твой бэк или чо там у тебя требует поле рекапча с каким то велью а тебе вложить нечего - как вариант запускай бэк с тестовым профилем где все эти капчи игнорятся ну или есть значение суперкапчи. очевидно ж что тебя бэк футболит. иначе ничего не сделаешь. или создавай профиль и делай код, или допиши тест где предварительно будет получаться значение капчи (один фиг тестовый профиль я думаю) ну или не тестируй тот код где есть валидация капчи а иди на следующий уровень ))
...
Рейтинг: 0 / 0
10.11.2018, 19:10
    #39731119
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + Spring Testing: отключить google captcha для тестирования
...либо еще один вариант --- мокаешь тот код который валидирует капчу -- и она всегда возвращает тру )) это имхо самый верный вариант.
...
Рейтинг: 0 / 0
10.11.2018, 19:32
    #39731125
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + Spring Testing: отключить google captcha для тестирования
А как мокается этот код?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
10.11.2018, 22:50
    #39731198
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + Spring Testing: отключить google captcha для тестирования
Мокай вот этот вызов:
restTemplate.postForObject(url, Collections.emptyList(), CaptureResponseDTO.class);

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

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

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

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

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

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

https://developers.google.com/recaptcha/docs/faq
...
Рейтинг: 0 / 0
13.11.2018, 15:24
    #39732484
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + Spring Testing: отключить google captcha для тестирования
Я мокаю метод 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
14.11.2018, 00:00
    #39732759
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + Spring Testing: отключить google captcha для тестирования
Вопрос решил так:
Код: 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
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + Spring Testing: отключить google captcha для тестирования / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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