2016-12-05 44 views
0

因此,當我的HTTP響應代碼應該是200時,我得到一個400.我將一個byte []對象傳遞給端點,但它似乎不會添加內容類型正確?有什麼建議麼?使用@RequestBody測試端點的單元

@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = "application/octet-stream") 
     public ResponseEntity<String> receiveCompressedBinary(@RequestHeader String site, @RequestHeader String customer, 
      @RequestHeader String table, @RequestBody byte[] binary, @RequestHeader String loadStatus) { 
     if(binary.length < maxFileSize) { 
      return new ResponseEntity<String>(HttpStatus.OK); 
     } 
     else{ 
      return new ResponseEntity<String>(HttpStatus.PAYLOAD_TOO_LARGE); 
     } 
     } 

我的測試:

@Test 
    public void testUploadCompressedBinaryInitialRunning() throws Exception{ 
    File file = new File("src/test/resources/testFile.txt"); 
    String site = "site"; 
    String customer = "customer"; 
    String table = "table"; 
    String loadStatus = "INITIALRUNNING"; 
    this.mockMvc.perform(post("/test").header("site",site).param("customer",customer). 
     param("table", table).content(compress(file)).param("loadStatus",loadStatus) 
     .with(user("user"))).andExpect(status().isOk()); 
    this.mockMvc.perform(post("/uploadCompressedBinary")).andDo(print()).andExpect(status().isOk()); 
    } 

壓縮方法:

public static byte[] compress(File file) throws IOException { 
    if (file.length() == 0) { 
     return null; 
    } 
    FileInputStream fileInputStream = null; 
    byte[] fileInBytes = new byte[(int)file.length()]; 
    try { 
     //convert file into array of bytes 
     fileInputStream = new FileInputStream(file); 
     fileInputStream.read(fileInBytes); 
     fileInputStream.close(); 
    } catch (IOException e) { 
     System.out.println("Exception whilst compressing the file: " + e.getMessage()); 
    } 

    ByteArrayOutputStream obj = new ByteArrayOutputStream(); 
    GZIPOutputStream gzip = new GZIPOutputStream(obj); 
    gzip.write(fileInBytes); 
    gzip.close(); 
    return obj.toByteArray(); 
    } 

UPDATE:GOT過去吧,而不是.PARAM,我應該使用.header

回答

0

它確實不像你在發佈時設置內容類型。

嘗試

this.mockMvc.perform(post("/test").header("site",site).param("customer",customer). 
     param("table", table).content(compress(file)).contentType("application/octet-stream").param("loadStatus",loadStatus) 
     .with(user("user"))).andExpect(status().isOk());