【发布时间】:2015-01-26 08:34:33
【问题描述】:
我正在尝试使用 apache httpclient LocalTestServer 为 WebDavClient(基于 jackrabbit)编写集成测试。 我受到以下blog 的启发,编写了以下测试:
public class WebDAVClientIT {
private LocalTestServer server;
@Before
public void setup() throws Exception{
server = new LocalTestServer(null, null);
server.start();
//direct all requests to my handelr
server.register("/*", new WebDavHandler());
}
@Test
public void testUploadFileStringInputStreamString() throws Exception {
WebDAVClient webDavClient = new WebDAVClient();
//set the client user/pass etc
webDavClient.init();
byte[] data = "123,456,789,123,456,789".getBytes();
InputStream input = new ByteArrayInputStream(data);
Status uploadFileStatus = webDavClient.uploadFile("test/file.csv", input, "text/csv");
assertThat(uploadFileStatus.getStatusCode(), is(HttpStatus.SC_CREATED));
}
@After
public void distory() throws Exception {
server.stop();
}
}
我创建了一个请求处理程序,让服务器感觉像一个 WebDav 服务器。
public class WebDavHandler implements HttpRequestHandler {
private Map<String, String> resources;
public WebDavHandler() {
//map existing resources
resources = new HashMap<>();
}
@Override
public void handle(HttpRequest request, HttpResponse response,
HttpContext context) throws HttpException, IOException {
RequestLine requestLine = request.getRequestLine();
String method = requestLine.getMethod();
String uri = request.getRequestLine().getUri();
switch (method) {
case "GET":
if (resources.containsKey(uri)) {
response.setStatusCode(HttpStatus.SC_OK);
} else {
response.setStatusCode(HttpStatus.SC_NOT_FOUND);
}
break;
case "MKCOL":
if (resources.containsKey(uri)) {
response.setStatusCode(HttpStatus.SC_OK);
} else {
response.setStatusCode(HttpStatus.SC_CREATED);
resources.put(uri, uri);
}
break;
}
logger.info("Executing " + request);
}
}
现在我的问题是 LocalTestServer 不是真正的 WebDav 服务器,并且 LocalTestServer 不支持 WebDav 支持的某些方法,例如MkColMethod
[statusCode=501, statusText=Internal Server Error, responseString=MKCOL method not supported]
如何扩展 LocalTestServer 以模拟 webdav 缺少的方法。
【问题讨论】:
标签: junit integration-testing webdav apache-httpcomponents