コントローラの1つに次のコードがあります。
@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());
}
}
次の例外が発生します。
循環ビューパス[設定]:現在のハンドラーURL [/設定]に再度ディスパッチされます。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
それが失敗したときにあなたが使用するものを投稿できます か?