1

有人可以解释为什么这个 httpunit 测试用例在 wc.getResponse 中一直以“错误的文件描述符”失败。我添加了 is.close() 作为猜测,并在失败前后移动了它,但这没有任何效果。此测试将请求发送到 Dropwizard 应用程序。

    public class TestCircuitRequests
{
    static WebConversation wc = new WebConversation();
    static String url = "http://localhost:8888/funl/circuit/test.circuit1";

@Test
public void testPut() throws Exception
{
    InputStream is = new FileInputStream("src/test/resources/TestCircuit.json");
    WebRequest rq = new PutMethodWebRequest(url, is, "application/json");

    wc.setAuthentication("FUNL", "foo", "bar");
    WebResponse response = wc.getResponse(rq);
    is.close();
}
4

1 回答 1

0

没有回应?所以我会根据我学到的东西来尝试自己。

Httpunit 是一个老熟悉的工具,如果可以的话,我会使用它。但是它已经两年多没有更新了,所以我认为它对@PUT 请求的支持是不对的。

所以我改为转换为 Jersey-client。经过一番挣扎后,我最终得到了这个似乎确实有效的代码:

    @Test
public void testPut() throws Exception
{
    InputStream is = new FileInputStream("src/test/resources/TestCircuit.json");
    String circuit = StreamUtil.readFully(is);
    is.close();

    Authenticator.setDefault(new MyAuthenticator());
    ClientConfig config = new DefaultClientConfig();
    Client client = Client.create(config);
    com.sun.jersey.api.client.WebResource service = client.resource(url);

    Builder builder = service.accept(MediaType.APPLICATION_JSON);
    builder.entity(circuit, MediaType.APPLICATION_JSON);
    builder.put(String.class, circuit);
    return;
}

这有意避免 JAX-RS 从 JSON 字符串自动构造 bean。

于 2012-10-05T23:40:32.140 回答