Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 29

Spring test с мок-контроллером постоянно возвращает статус 200

09.02.2017, 14:03. Показов 791. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть SPRING REST приложение . Независимо от того, является URL является правильным или нет, я всегда получаю статус 200. Так что класс контроллера никогда не используется (отладка не останавливается на brake-point внутри него)
Вот WebSecurityConfiguration
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
 
    @Autowired
    private UserDetailsService userDetailsService;
 
    @Autowired
    private AuthenticationSuccessHandler authenticationSuccessHandler;
 
    @Autowired
    protected void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
        auth.authenticationProvider(authenticationProvider());
    }
 
    @Bean
    public AuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
        authenticationProvider.setUserDetailsService(userDetailsService);
        authenticationProvider.setPasswordEncoder(passwordEncoder());
        return authenticationProvider;
    }
 
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers("/", "/login").permitAll()
                    .antMatchers("/logout").authenticated()
                    .antMatchers("/admin**/**").access("hasRole('ADMIN')")
                    .antMatchers("/leader**/**").access("hasRole('LEADER')")
                    .antMatchers("/user**/**").access("hasRole('LEADER') or hasRole('USER')")
                    .antMatchers("/askhelp").authenticated()
                .and()
 
                .formLogin()
                    .loginPage("/login")
                    .loginProcessingUrl("/login")
                    .successHandler(authenticationSuccessHandler)
                    .failureUrl("/login.html?error=true")
                .and()
 
                    .logout()
                    .invalidateHttpSession(true)
                    .logoutSuccessUrl("/logout")
                    .deleteCookies("JSESSIONID", "XSRF-TOKEN")
                .and()
 
                .exceptionHandling()
                    .accessDeniedPage("/access_denied")
                .and()
 
                .csrf()
                    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }
 
    private Filter csrfHeaderFilter() {
        return new OncePerRequestFilter() {
            @Override
            protected void doFilterInternal(HttpServletRequest request,
                                            HttpServletResponse response, FilterChain filterChain)
                    throws ServletException, IOException {
                CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class
                        .getName());
                if (csrf != null) {
                    Cookie cookie = WebUtils.getCookie(request, "X-XSRF-TOKEN");
                    String token = csrf.getToken();
                    if (cookie == null || token != null
                            && !token.equals(cookie.getValue())) {
                        cookie = new Cookie("X-XSRF-TOKEN", token);
                        cookie.setPath("/");
                        response.addCookie(cookie);
                    }
                }
                filterChain.doFilter(request, response);
            }
        };
    }
 
 
    private CsrfTokenRepository csrfTokenRepository() {
        HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
        repository.setHeaderName("X-XSRF-TOKEN");
        return repository;
    }
 
    @Bean
    public AuthenticationTrustResolver getAuthenticationTrustResolver() {
        return new AuthenticationTrustResolverImpl();
    }
}
Controller
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
@RestController
 
public class VillagesController {
    private static final Logger log = LoggerFactory.getLogger(VillagesController.class);
    @Autowired
    VillageService villageService;
    @Autowired
    UserService userService;
 
 
    @RequestMapping(value = "/village/{id}", method = RequestMethod.GET)
    public ResponseEntity<Village> getVillageById(@PathVariable(name = "id") String id) {
        Village village = villageService.getById(id);
        if (village == null)
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        return new ResponseEntity<>(village, HttpStatus.OK);
    }
 
    /**
     * Adds new village in a database.
     * @param village
     * @return added village.
     * @throws JsonProcessingException
     * @throws EntityNotUniqueException
     */
    @RequestMapping(value = "/village/", method = RequestMethod.POST)
    public ResponseEntity<Village> addVillage(@RequestBody Village village) throws JsonProcessingException, EntityNotUniqueException {
        UserDetails principal = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
       log.info("I'm here");
        User userByUsername = userService.getUserByUsername(principal.getUsername());
        village.setPlayer(userByUsername.getPlayer());
 
        if (villageService.isUnique(village)) {
            villageService.add(village);
            log.info("Village added : {}",village);
        }
        return new ResponseEntity<>(village, HttpStatus.CREATED);
    }
 
    /**
     * Updates village.
     * @param id
     * @param village
     * @return updated village.
     */
    @RequestMapping(value = "/village/{id}", method = RequestMethod.PUT)
    public ResponseEntity<Village> updateVillage(@PathVariable(name = "id") String id, @RequestBody Village village) {
        Village current_village = villageService.getById(id);
        if (current_village != null) {
            current_village.setName(village.getName());
            current_village.setxCoord(village.getxCoord());
            current_village.setyCoord(village.getyCoord());
            current_village.setPopulation(village.getPopulation());
            current_village.setWall(village.getWall());
            current_village.setIsCapital(village.getIsCapital());
            current_village.setUuid(village.getUuid());
            Collections.sort(village.getArmies());
            current_village.setArmies(village.getArmies());
            if (villageService.isUnique(current_village)) {
                villageService.update(current_village);
                log.info("Village updated : {}",current_village);
            }
            return new ResponseEntity<>(current_village, HttpStatus.CREATED);
        }
 
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
 
    @RequestMapping(value = "/village/{id}", method = RequestMethod.DELETE)
    public ResponseEntity<Village> deleteVillage(@PathVariable(name = "id") String id) {
        Village Village = villageService.getById(id);
        if (Village == null) {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
        villageService.delete(Village);
        return new ResponseEntity<>(Village, HttpStatus.NO_CONTENT);
    }
 
}
Controller test
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
@ContextConfiguration(classes = {WebConfiguration.class, WebSecurityConfiguration.class})
@WebAppConfiguration
public class VillagesControllerTest extends AbstractTestNGSpringContextTests {
 
 
    VillageService villageService;
 
     @Mock
     UserService userService;
 
    @Autowired
    private WebApplicationContext context;
 
 
    @Autowired
    private FilterChainProxy springSecurityFilterChain;
 
 
 
    @InjectMocks
    VillagesController villagesController;
 
    private MockMvc mockMvc;
    @Spy
    List<Village> alliances = new ArrayList<>();
    @BeforeClass
    public void setUp(){
this.villageService=mock(VillageService.class,withSettings().verboseLogging());
        MockitoAnnotations.initMocks(this);
        this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .apply(SecurityMockMvcConfigurers.springSecurity())
//                .addFilters(this.springSecurityFilterChain)
                .build();
 
    }
    @AfterMethod
    public void resetAllMocks(){
        Mockito.reset(villageService);
    }
 
 
 
 
    @Test
//    @WithMockUser(username = "trinity",password = "222",roles = {"USER"})
    public void testAddVillage() throws Exception {
        Village village = new Village();
        village.setName("Villkljkj");
        village.setPlayer(new Player());
        village.setxCoord((short) 58);
        village.setyCoord((short) 32);
        village.setArmies(new ArrayList<>());
        village.setIsCapital(true);
        village.setPopulation((short) 500);
        village.setWall((byte) 20);
        village.setUuid("0");
 
 
      when(userService.getUserByUsername(anyString())).thenReturn(new ua.cv.tim.model.User());
 
        doNothing().when(villageService).add(village);
 
        MockHttpServletRequestBuilder builder =
                MockMvcRequestBuilders.post("/villagkjje")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(convertObjectToJsonBytes(village));
//                        .with(user("trinity").password("222").roles("ADMIN"));
        this.mockMvc.perform(builder)
                .andExpect(unauthenticated())
                .andExpect(MockMvcResultMatchers.status().isCreated());
//                .andDo(MockMvcResultHandlers.print());
 
 
 
 
  //      ArgumentCaptor<Village> villageArgumentCaptor = ArgumentCaptor.forClass(Village.class);
        verify(villageService, times(1)).add(village);
//        verify(villageService,times(1))
    }
 
 
    @Test
//    @WithMockUser(username = "trinity",password = "222",roles = {"USER"})
    public void testUpdateVillage() throws Exception {
        Village village = new Village();
        village.setName("Villkljkj");
        village.setPlayer(new Player());
        village.setxCoord((short) 58);
        village.setyCoord((short) 32);
        village.setArmies(new ArrayList<>());
        village.setIsCapital(true);
        village.setPopulation((short) 500);
        village.setWall((byte) 20);
        village.setUuid("0");
when(villageService.getById("0")).thenReturn(village);
when(villageService.isUnique(village)).thenReturn(true);
        MockHttpServletRequestBuilder builder =
                MockMvcRequestBuilders.post("/village/0")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(convertObjectToJsonBytes(village))
                        .with(user("trinity").password("222").roles("USER")).with(csrf());
        this.mockMvc.perform(builder)
                .andExpect(MockMvcResultMatchers.status().isCreated())
                .andExpect(authenticated())
                .andDo(MockMvcResultHandlers.print());
//        verify(villageService, times(0)).update(village);
    }
 
    public static byte[] convertObjectToJsonBytes(Object object) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        return mapper.writeValueAsBytes(object);
    }
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.02.2017, 14:03
Ответы с готовыми решениями:

Dbunit test with spring data
Есть конфиг бд и тест @Configuration @EnableTransactionManagement @EnableJpaRepositories(basePackages =...

ПРограмма постоянно имеет статус not responding
Написал программу на VB. Работает с базами данных. Все вроде нормально, программа выполняет свои функции, но в диспетчере задач она висит...

Почему XMLHttp запрос возвращает статус Unknown?
Добрый день! Такая ситуация: уже довольно долгое время ежедневно скачиваю с сайта санкт-петербургской биржи отчеты (списки индексов и...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2017, 14:03
Помогаю со студенческими работами здесь

После запуска скайпа, статус постоянно крутится и не входит в онлаин
После запуска скаипа, статус постоянно крутится и не входит в онлаин, контакты активны, звонки вхоящие/исходящие проходят, сообщения не...

Бот для telegram (pyTelegramBotAPI) Метод не возвращает статус подписки
Добрый день товарищи программисты. Первый раз работаю с api Telegram. Суть работы бота в том, что нужно пользователю подписаться на канал,...

mysqli_insert_id не возвращает ID вставленной записи, постоянно возвращает "1".
Есть запрос такой расчитываю через insert_id получить id добавленной книги, но почему-то возвращает результат 1, хотя в бд всё нормально...

Сколько памяти (в байтах) займет данный массив: class Test { public: int c=0,r=0; double q = 0; }; Test *Mass = new Test
Сколько памяти (в байтах) займет данный массив: class Test { public: int c=0, r=0; double q = 0; }; Test *Mass = new...

Сервер возвращает 200 вместо 302
Я так понимаю это своеобразная защита. Пытаюсь отправить пост запрос на http://takefriend.ru/mobile/rervk Мой код на отправку запроса....


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru