Nie*_*els 6 java rest junit jax-rs mocking
我有一个发送JAX-RS POST调用的方法的JUnit测试.为了独立于外部资源,我模拟了REST客户端,并说应该返回一个虚拟响应.效果很好,没问题.但:
在调用时myResponse.readEntity(String.class)我总是得到以下异常:
java.lang.IllegalStateException:RESTEASY003290:实体不受输入流支持
这是我的代码片段失败:
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Test;
public class SimpleTest {
@Test
public void testReadResponse() {
final JsonObject responseContent = new JsonObject();
responseContent.add("field", new JsonPrimitive("This is a JSON for testing."));
final String expected = responseContent.toString();
final Response.ResponseBuilder builder = Response.ok()
.entity(responseContent.toString())
.header("Content-Type", MediaType.APPLICATION_JSON);
final Response dummyResponse = builder.build();
final String result = dummyResponse.readEntity(String.class); // <-- Exception is thrown here!
assertThat("JSON Strings are not identical.", result, is(expected));
}
}
Run Code Online (Sandbox Code Playgroud)
和Stacktrace:
java.lang.IllegalStateException: RESTEASY003290: Entity is not backed by an input stream
at org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:230)
at org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:219)
at de.me.myproject.SimpleTest.testReadResponse(SimpleTest.java:43)
Run Code Online (Sandbox Code Playgroud)
在我的生产代码中,它调用一个非模拟的REST API,它返回一个自动构建响应,该.readEntity(String.class)方法工作正常.
dur*_*dur 10
Response是一个抽象类,RESTEasy有不同的客户端和服务器子类,请参阅BuiltResponse和ClientResponse.并非每个子类都支持所有方法.
Response#readEntity 需要由输入流支持:
ProcessingException如果消息的内容不能映射到所请求类型的实体,并且IllegalStateException如果实体没有输入流支持,或者如果原始实体输入流已经被消费而没有buffering实体数据先消耗,则方法抛出一个if .
A BuiltResponse永远不会被输入流支持,因此您得到了一个IllegalStateException.
你可以使用Response#getEntity,它不需要输入流.
| 归档时间: |
|
| 查看次数: |
8727 次 |
| 最近记录: |