MockMvc не передает атрибуты сеанса в контроллер - PullRequest
0 голосов
/ 01 ноября 2019

Я пишу @WebMvcTest модульные тесты для контроллера Spring Boot. Проблема: контроллер не получает атрибуты сеанса, переданные ему MockMvc.

Следующий тест не пройден, поскольку сессия контроллера всегда пуста:

@RunWith(SpringRunner.class)
@WebMvcTest(SessionController.class)
@AutoConfigureMockMvc
public class SessionControllerTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetName() throws Exception {
        mockMvc
            .perform(get("/session/name")
                .sessionAttr("name", "Smith"))
            .andExpect(status().isOk())
            .andExpect(content().string("Smith"));
    }
}

Вот контроллер. При вызове из браузера конечная точка и сеанс / name работают правильно.

@RestController
@RequestMapping("/session")
public class SessionController {

    @GetMapping("/name")
    public String getName(HttpSession session) {
        String name = (String)session.getAttribute("name");
        return name;
    }
}

Соответствующие зависимости gradle:

plugins {
    id 'org.springframework.boot' version '2.1.7.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
}

sourceCompatibility = '11'

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.springframework.session:spring-session-core'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

Поставщик сеанса просто ConcurrentHashMap. Вот конфигурация:

@Configuration
@EnableWebMvc
@EnableSpringHttpSession
public class MyWebConfig implements WebMvcConfigurer {

    @Profile({ "default", "dev" })
    @Bean
    public MapSessionRepository sessionRepository() {
        return new MapSessionRepository(new ConcurrentHashMap<>());
    }
}

Что я пропускаю / не понимаю? Спасибо!

...