mar*_*hon 7 java unit-testing servlets http spring-test
显然我没有正确使用这个测试夹具.我的servlet在tomcat中运行得很好,但是当我尝试使用这个模拟时,找不到多部分边界."请求被拒绝,因为没有找到多部分边界".
有一个答案在这里,说明如何使用该使用文本文件,但这个问题的答案明确规定的边界线并嵌入文件作为测试.我想我不需要手工处理像mockrequest.addFile(...)这样的方法
我没有在这里设置什么或者我怎么做错了?
@org.testng.annotations.Test
public void testDoPost() throws Exception
{
MockMultipartFile file = new MockMultipartFile("test.zip", "test.zip", "application/zip", MyServletTest.class.getResourceAsStream("/test.zip"));
MockMultipartHttpServletRequest mockRequest = new MockMultipartHttpServletRequest();
mockRequest.addFile(file);
mockRequest.set
mockRequest.setMethod("POST");
mockRequest.setParameter("variant", "php");
mockRequest.setParameter("os", "mac");
mockRequest.setParameter("version", "3.4");
MockHttpServletResponse response = new MockHttpServletResponse();
new MyServletTest().doPost(mockRequest, response);
// BOOM !
}
Run Code Online (Sandbox Code Playgroud)
这是例外
Caused by: blablah: the request was rejected because no multipart boundary was found
Run Code Online (Sandbox Code Playgroud)
Sam*_*ida 16
你需要设置边界.
关于什么是边界有一个很好的解释/sf/answers/765277341/
要解决您的问题,请尝试此代码.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.commons.lang.ArrayUtils;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.mock.web.MockMultipartHttpServletRequest;
public class FileUploadTest {
public void testDoPost() throws IOException {
Path path = Paths.get("c:\\temp\\test.zip");
byte[] data = Files.readAllBytes(path);
MockMultipartFile file = new MockMultipartFile("test.zip", "test.zip",
"application/zip", data);
MockMultipartHttpServletRequest mockRequest = new MockMultipartHttpServletRequest();
String boundary = "q1w2e3r4t5y6u7i8o9";
mockRequest.setContentType("multipart/form-data; boundary="+boundary);
mockRequest.setContent(createFileContent(data,boundary,"application/zip","test.zip"));
mockRequest.addFile(file);
mockRequest.setMethod("POST");
mockRequest.setParameter("variant", "php");
mockRequest.setParameter("os", "mac");
mockRequest.setParameter("version", "3.4");
MockHttpServletResponse response = new MockHttpServletResponse();
new FileUpload().doPost(mockRequest, response);
}
public byte[] createFileContent(byte[] data, String boundary, String contentType, String fileName){
String start = "--" + boundary + "\r\n Content-Disposition: form-data; name=\"file\"; filename=\""+fileName+"\"\r\n"
+ "Content-type: "+contentType+"\r\n\r\n";;
String end = "\r\n--" + boundary + "--"; // correction suggested @butfly
return ArrayUtils.addAll(start.getBytes(),ArrayUtils.addAll(data,end.getBytes()));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3780 次 |
最近记录: |