내 컨트롤러 중 하나에 다음 코드가 있습니다.
@Controller
@RequestMapping("/preference")
public class PreferenceController {
@RequestMapping(method = RequestMethod.GET, produces = "text/html")
public String preference() {
return "preference";
}
}
다음과 같이 Spring MVC 테스트 를 사용하여 테스트하려고 합니다.
@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());
}
}
다음 예외가 발생합니다.
순환보기 경로 [preference] : 현재 핸들러 URL [/ preference]로 다시 디스패치합니다. ViewResolver 설정을 확인하십시오! (힌트 : 이것은 기본보기 이름 생성으로 인해 지정되지 않은보기의 결과 일 수 있습니다.)
이상한 점은 아래와 같이 템플릿과 뷰 리졸버를 포함하는 "전체"컨텍스트 구성 을 로드 할 때 제대로 작동 한다는 것입니다 .
<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>
템플릿 리졸버에 의해 추가 된 접두사는 앱이이 템플릿 리졸버를 사용할 때 "원형 뷰 경로"가 없다는 것을 잘 알고 있습니다.
그렇다면 Spring MVC 테스트를 사용하여 내 앱을 어떻게 테스트해야합니까?
@RestController
대신 사용@Controller
ViewResolver
실패 할 때 사용 하는 것을 게시 할 수 있습니까 ?