So vermeiden Sie die Ausnahme "Pfad der kreisförmigen Ansicht" beim Spring MVC-Test

Ich habe den folgenden Code in einem meiner Controller:

@Controller
@RequestMapping("/preference")
public class PreferenceController {

    @RequestMapping(method = RequestMethod.GET, produces = "text/html")
    public String preference() {
        return "preference";
    }
}

Ich versuche einfach, es mit zu testenSpring MVC Test wie folgt:

@ContextConfiguration
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class PreferenceControllerTest {

    @Autowired
    private WebApplicationContext ctx;

    private MockMvc mockMvc;
    @Before
    public void setup() {
        mockMvc = webAppContextSetup(ctx).build();
    }

    @Test
    public void circularViewPathIssue() throws Exception {
        mockMvc.perform(get("/preference"))
               .andDo(print());
    }
}

Ich erhalte die folgende Ausnahme:

Circular View Path [Präferenz]: Wird erneut an die aktuelle Handler-URL [/ Präferenz] gesendet. Überprüfen Sie Ihr ViewResolver-Setup! (Hinweis: Dies kann das Ergebnis einer nicht angegebenen Ansicht sein, da der Name der Standardansicht generiert wurde.)

Was ich merkwürdig finde, ist dasEs funktioniert einwandfrei, wenn ich die "vollständige" Kontextkonfiguration lade Dazu gehören die folgenden Vorlagen- und Ansichtsauflöser:

<bean class="org.thymeleaf.templateresolver.ServletContextTemplateResolver" id="webTemplateResolver">
    <property name="prefix" value="WEB-INF/web-templates/" />
    <property name="suffix" value=".html" />
    <property name="templateMode" value="HTML5" />
    <property name="characterEncoding" value="UTF-8" />
    <property name="order" value="2" />
    <property name="cacheable" value="false" />
</bean>

Mir ist bewusst, dass das vom Vorlagen-Resolver hinzugefügte Präfix sicherstellt, dass es keinen "kreisförmigen Ansichtspfad" gibt, wenn die App diesen Vorlagen-Resolver verwendet.

Aber wie soll ich dann meine App mit Spring MVC testen? Hat jemand eine Ahnung?

Antworten auf die Frage(14)

Ihre Antwort auf die Frage