J'ai le code suivant dans un de mes contrôleurs :
@Controller
@RequestMapping("/preference")
public class PreferenceController {
@RequestMapping(method = RequestMethod.GET, produces = "text/html")
public String preference() {
return "preference";
}
}
J'essaie simplement de le tester en utilisant Test de Spring MVC comme suit :
@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());
}
}
J'obtiens l'exception suivante :
Chemin d'accès circulaire [préférence] : renvoie à l'URL du gestionnaire actuel [/préférence]. gestionnaire actuel [/préférence]. Vérifiez la configuration de votre ViewResolver ! (Indice : Cela peut être le résultat d'une vue non spécifiée, en raison de la vue par défaut. par défaut).
Ce que je trouve étrange, c'est que cela fonctionne bien lorsque je charge la configuration contextuelle "complète". qui inclut le modèle et les résolveurs de vue comme indiqué ci-dessous :
<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>
Je suis bien conscient que le préfixe ajouté par le résolveur de modèle garantit qu'il n'y a pas de "chemin de vue circulaire" lorsque l'application utilise ce résolveur de modèle.
Mais alors comment suis-je censé tester mon application en utilisant le test Spring MVC ?