1

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;
    }

}
4

0 に答える 0