[JAVA] Redirection et test unitaire à l'aide de la lunette Spring Flash

Lors de la redirection d'un point de terminaison vers un autre, vous pouvez utiliser l'étendue flash pour hériter des paramètres vers la destination de la redirection.

manette

Lorsque vous accédez à / from avec GET avec le contrôleur suivant, redirigez vers / vers. Dans le processus de la source de la redirection, le «bookName» et la «BuyerList» sont poussés dans la portée flash et repris vers la destination de la redirection.

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.Arrays;
import java.util.List;

@Controller
public class DemoController {

    @GetMapping(path = "/from")
    public String from(RedirectAttributes redirectAttributes) {

        redirectAttributes.addFlashAttribute("bookName", "Doraemon");

        List<String> buyerList = Arrays.asList("Nobi", "Gouda");
        redirectAttributes.addFlashAttribute("buyerList", buyerList);

        return "redirect:/to";
    }

    @GetMapping(path = "/to")
    public String to(Model model) {
        System.out.println(model);
        return "demo";
    }
}

Lorsque vous accédez à / from, vous serez redirigé vers / vers et les paramètres hérités seront affichés sur la console.

{bookName=Doraemon, buyerList=[Nobi,Gouda]}

point

--Définissez RedirectAttributes comme argument dans la méthode source de redirection, et spécifiez le nom de l'attribut et le contenu à hériter dans .addFlashAttribute. Le nom d'attribut peut être omis, mais dans ce cas, le nom d'attribut est automatiquement défini en fonction du nom de la classe. --A la destination de la redirection, l'attribut est inclus dans l'ensemble Model de l'argument. Si vous voulez faire référence au contenu, spécifiez le nom de l'attribut avec .getAttribute.

Test de l'unité

Assurez-vous que lorsque vous accédez à / from, vous hériterez des paramètres et serez redirigé vers / vers.

package com.example.demo.controller;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

import java.util.Arrays;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.flash;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class DemoControllerTest {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void redirectWithAttributes() throws Exception {
        mockMvc.perform(get("/from"))
                .andExpect(status().isFound())
                .andExpect(redirectedUrl("/to"))
                .andExpect(flash().attribute("bookName", "Doraemon"))
                .andExpect(flash().attribute("buyerList", Arrays.asList("Nobi", "Gouda")));
    }
}

point

--Vérifiez avec ʻandExpect () `que cela fonctionne comme prévu.

Extraction par FlashMap

Le paramètre de prise de contrôle peut être récupéré avec FlashMap comme suit. Utilisez cette option si vous souhaitez confirmer qu'il n'y a pas de paramètres supplémentaires ou si vous ne pouvez pas faire une assertion avec une expression de chaîne de caractères simple.


    @Test
    public void redirectWithAttributes() throws Exception {

        MvcResult mvcResult = mockMvc.perform(get("/from"))
                .andExpect(status().isFound())
                .andExpect(redirectedUrl("/to"))
                .andReturn();

        FlashMap flashMap = mvcResult.getFlashMap();

        assertThat(flashMap.size()).isEqualTo(2);
        assertThat(flashMap.get("bookName")).isEqualTo("Doraemon");
        assertThat(flashMap.get("buyerList")).isEqualTo(Arrays.asList("Nobi", "Gouda"));

Recommended Posts

Redirection et test unitaire à l'aide de la lunette Spring Flash
À propos de la conception de Spring Boot et de l'environnement de test unitaire
Test des entités et référentiels JPA à l'aide de Spring Boot @DataJpaTest