1. 程式人生 > >mockmvc junit測試的時候 引數型別為int報錯

mockmvc junit測試的時候 引數型別為int報錯

controllerr


@RunWith(SpringRunner.class)
@SpringBootTest(classes=StaticcacheApplication.class)//不在同級別目錄的話需要引數指定啟動類的path
@WebAppConfiguration    //呼叫javaWEB的元件,比如自動注入ServletContext Bean等等
@AutoConfigureMockMvc
public class BaseTest {

   @Autowired
protected MockMvc mockMvc;

   /*
   @Autowired
   protected WebApplicationContext webApplicationConnect;
@Before public void setUp() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationConnect).build(); } */ @Test public void echoTest(){ System.out.println("========"); } }

public class ControllerTest extends BaseTest {

   @Test
public void testIndex() throws 
Exception { /* perform:執行一個RequestBuilder請求,會自動執行SpringMVC的流程並對映到相應的控制器執行處理; get:聲明發送一個get請求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables):根據uri模板和uri變數值得到一個GET請求方式的。另外提供了其他的請求的方法,如:postputdelete等。 param:新增request的引數,如上面傳送請求的時候帶上了了pcode = root
的引數。假如使用需要傳送json資料格式的時將不能使用這種方式,可見後面被@ResponseBody註解引數的解決方法 andExpect:新增ResultMatcher驗證規則,驗證控制器執行完成後結果是否正確(對返回的資料進行的判斷); andDo:新增ResultHandler結果處理器,比如除錯時列印結果到控制檯(對返回的資料進行的判斷); andReturn:最後返回相應的MvcResult;然後進行自定義驗證/進行下一步的非同步處理(對返回的資料進行的判斷) */ MockHttpServletResponse response = mockMvc.perform(MockMvcRequestBuilders.get("/index") //請求的url,請求的方法是get .contentType(MediaType.TEXT_HTML) //請求引數格式 .param("address", "合肥").param("age", "20") //請求引數資料 .accept(MediaType.TEXT_HTML)) .andExpect(MockMvcResultMatchers.status().isOk()) //返回的狀態是200 .andReturn().getResponse(); System.out.println(response.getContentAsString()); //請求資料是json Map<String, Object> map = new HashMap<>(); map.put("address", "合肥啊"); map.put("age", 11); String params = JSON.toJSONString(map); RequestBuilder request = MockMvcRequestBuilders.get("/index").contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).content(params); MvcResult mvcResult = mockMvc.perform(request).andReturn(); int status = mvcResult.getResponse().getStatus(); Assert.assertTrue("錯誤,正確的返回值為200", status == 200); System.out.println(mvcResult.getResponse().getContentAsString()); }
錯誤
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Optional int parameter 'age' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.

貌似不可一世使用int??