Не указан InputStream при использовании метода spring-mvc-test andDo()

недавно, когда я выполняю свою работу с использованием spring-mvc-test-framework, код выглядит следующим образом:

this.mockMvc.perform(MockMvcRequestBuilders.get("/manage/bill/detail/{id}","5507c2240cf2bc43ba2367bd").accept(MediaType.ALL)).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcRestDocumentation.document("index"));

то я получил эту ошибку.

java.lang.IllegalArgumentException: No InputStream specified
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.util.FileCopyUtils.copy(FileCopyUtils.java:106)
at   org.springframework.util.FileCopyUtils.copyToByteArray(FileCopyUtils.java:156)
at org.springframework.restdocs.mockmvc.MockMvcOperationRequestFactory.createOperationRequest(MockMvcOperationRequestFactory.java:83)
at       org.springframework.restdocs.mockmvc.RestDocumentationResultHandler.handle(RestDocumentationResultHandler.java:93)
at org.springframework.test.web.servlet.MockMvc$1.andDo(MockMvc.java:155)

Я искал и не нашел ответов. кто-нибудь может сказать мне, почему это происходит?

Теперь у меня есть другое решение.

на самом деле я использую тестовый пример Spring MVC в его официальной ссылке http://docs.spring.io/spring-restdocs/docs/1.0.0.RELEASE/reference/html5/#getting-started-build-configuration-maven-packaging и используйте метод setUp() следующим образом:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build();

цель состоит в том, чтобы задокументировать API. Теперь другое решение: я использую метод apply (), а затем проблема решена.

во-первых, я изменил на:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
                .apply(MockMvcRestDocumentation.documentationConfiguration(this.restDocumentation)).build();

затем решил проблему с версией следующим образом: >

Весь мой код ниже:

package com.dream.bwm.test.test;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.restdocs.RestDocumentation;
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = { "classpath:spring/root-context.xml", "classpath:spring/app-context.xml" })
public class DocsGenerator {

    public static String outputDir = "D:\\workspace-bwme\\pro-root\\bwme-backend\\target\\generated-snippets";

    @Rule
    public final RestDocumentation restDocumentation = new RestDocumentation(outputDir);

    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    @Before
    public void setUp() {
        // this.mockMvc =
        // MockMvcBuilders.webAppContextSetup(this.context).build();

        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
                .apply(MockMvcRestDocumentation.documentationConfiguration(this.restDocumentation)).build();

    }

    // @Test
    public void printOnConsole() throws Exception {

        this.mockMvc
                .perform(
                        MockMvcRequestBuilders.get("/manage/bill/detail/{id}", "5507c2240cf2bc43ba2367bd").accept(
                                MediaType.ALL_VALUE)).andDo(MockMvcResultHandlers.print())
                .andExpect(MockMvcResultMatchers.status().isOk());// MockMvcRestDocumentation.document("index")
    }

    @Test
    public void writeToDocument() throws Exception {
        this.mockMvc
                .perform(
                        RestDocumentationRequestBuilders.get("/manage/bill/detail/{id}", "5507c2240cf2bc43ba2367bd")
                                .accept(MediaType.ALL)).andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcRestDocumentation.document("index"));

    }
}

надеюсь, что это может помочь вам, если кто-то сталкивается с такими вопросами.


person MrJ    schedule 28.04.2016    source источник
comment
Не добавляйте код в виде комментариев, измените свой первоначальный вопрос.   -  person M. Deinum    schedule 28.04.2016
comment
извините, впервые публикую вопрос на платформе. спасибо за совет   -  person MrJ    schedule 29.04.2016