O. Spring ブート server.context-path=/myRoot を使用しています。次に、@RequestMapping("/some/path") を処理する @RestController があります。コントローラー単体テストでは、MockMvc を使用しています。
@Test
public void shouldGetSuccessfulHttpResponseForBasket() throws Exception {
//Given
String requestURL = "/some/path";
//When
MvcResult result = getMockMvc().perform(get(requestURL))
//Then
.andExpect(status().isOk());
String content = result.getResponse().getContentAsString();
assertNotEquals("Content should not be empty", "", content);
}
だから私の問題は、コンテンツが空になることです。これは、単体テストで server.context-path=/myRoot を使用していないためです。したがって、この URL "/myRoot/some/path" を使用すると、一致するハンドラーが見つからないため、http ステータスは 400 になります。この URL "/some/path" を使用すると、http ステータスは 200 になりますが、コンテンツは空です (空であってはならない場合)。コントローラーに @RequestMapping("/myRoot") のアノテーションを付けると、この URL "/myRoot/some/path" で動作します。しかし、私のアプリケーションは期待どおりに動作しません。この最後のケースでは、サービスからの応答を得るために、この URL "/myRoot/myRoot/some/path" を使用する必要があります。
したがって、理想的な解決策は、server.context-path=/myRoot を取り除くことです。アプリケーションがそのプロパティに依存しているため、これは実行できません。これを解決する方法についてのアイデアはありますか?
前もって感謝します。
アップデート:
これは私の基本クラスです。私のテストクラスはこれを拡張しています。
/**
* Sets up and gets the mvc test support available in the mock context.
*/
public abstract class MvcTestCase {
/** The spring mock web context. */
@Autowired
private WebApplicationContext webContext;
/**
* The service that creates a mock context to test against the front Controller.
*/
private MockMvc mockMvc;
/**
* Sets up the service that creates a mock context to test against the front Controller.
*
* @throws Exception thrown when set up fails.
*/
@Before
public void setupMockContext() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(webContext)
.build();
}
/**
* Gets the mock mvc test support.
*
* @return The entry point for server-side Spring MVC test support.
*/
public MockMvc getMockMvc() {
return mockMvc;
}
}