Ho il seguente codice in uno dei miei controller:
@Controller
@RequestMapping("/preference")
public class PreferenceController {
@RequestMapping(method = RequestMethod.GET, produces = "text/html")
public String preference() {
return "preference";
}
}
Sto semplicemente cercando di testarlo usando il test Spring MVC come segue:
@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());
}
}
Ricevo la seguente eccezione:
Percorso di visualizzazione circolare [preferenza]: verrebbe inviato nuovamente all'URL del gestore corrente [/ preferenza]. Controlla la configurazione di ViewResolver! (Suggerimento: potrebbe essere il risultato di una vista non specificata, a causa della generazione del nome della vista predefinita.)
Quello che trovo strano è che funziona bene quando carico la configurazione del contesto "completo" che include il modello e visualizza i risolutori come mostrato di seguito:
<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>
Sono ben consapevole che il prefisso aggiunto dal risolutore di modelli garantisce che non ci sia un "percorso di visualizzazione circolare" quando l'app utilizza questo risolutore di modelli.
Ma allora come dovrei testare la mia app usando il test Spring MVC?
@RestController
posto di@Controller
ViewResolver
che usi quando fallisce?