[JAVA] Umleitung und Komponententest mit dem Spring Flash-Zielfernrohr

Wenn Sie von einem Endpunkt zu einem anderen umleiten, können Sie den Flash-Bereich verwenden, um die Parameter an das Umleitungsziel zu erben.

Regler

Wenn Sie mit GET mit dem folgenden Controller auf / from zugreifen, leiten Sie zu / to um. Während der Weiterleitungsquelle werden der "Buchname" und die "Käuferliste" in den Flash-Bereich verschoben und an das Umleitungsziel übertragen.

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";
    }
}

Wenn Sie auf / from zugreifen, werden Sie zu / to umgeleitet und die geerbten Parameter werden auf der Konsole angezeigt.

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

Punkt

Gerätetest

Stellen Sie sicher, dass Sie beim Zugriff auf / from die Parameter erben und zu / to umgeleitet werden.

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")));
    }
}

Punkt

Extraktion mit FlashMap

Der Übernahmeparameter kann wie folgt mit FlashMap abgerufen werden. Verwenden Sie diese Option, wenn Sie bestätigen möchten, dass keine zusätzlichen Parameter vorhanden sind, oder wenn Sie mit einem einfachen Zeichenfolgenausdruck keine Aussage treffen können.


    @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

Umleitung und Komponententest mit dem Spring Flash-Zielfernrohr
Informationen zum Entwerfen einer Spring Boot- und Unit-Test-Umgebung
Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest