Unit testing 单元测试作为响应实体流化输出

Unit testing 单元测试作为响应实体流化输出,unit-testing,jar,jersey,mockito,junit4,Unit Testing,Jar,Jersey,Mockito,Junit4,我正在做一些类似于中提到的事情 我试图通过模仿中提到的URIInfo来进行单元测试 我希望在将jar路径切换到其他路径时能够检查是否出现异常 public void write(OutputStream os) throws IOException, WebApplicationException {...} part和我总是只点击返回Response.ok(stream,MediaType.APPLICATION_OCTET_stream).build() 我是不是

我正在做一些类似于中提到的事情

我试图通过模仿中提到的URIInfo来进行单元测试

我希望在将jar路径切换到其他路径时能够检查是否出现异常

public void write(OutputStream os) throws IOException,
            WebApplicationException {...}
part和我总是只点击
返回Response.ok(stream,MediaType.APPLICATION_OCTET_stream).build()


我是不是错过了一些很明显的东西

因为流在到达
MessageBodyWriter
(该组件最终调用
StreamingOutput#write
)后才会写入

您可以做的就是从返回中获取
响应
,然后调用
响应#getEntity()
(它返回一个对象)并将其强制转换为
StreamingOutput
。然后自己调用
write
方法,传递一个
OutputStream
,可能是一个
ByteArrayOutputStream
,这样就可以将内容作为
字节[]
进行检查。这一切看起来就像

UriInfo mockInfo = mockUriInfo();
Response response = resource.streamExample(mockInfo);
StreamingOutput output = (StreamingOutput) response.getEntity();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
output.write(baos);
byte[] data = baos.toByteArray();
String s = new String(data, StandardCharsets.UTF_8);
assertThat(s, is("SomeCharacterData"));

谢谢你的回复。如果我理解正确,任何检查都会涉及到将从输出字节数组派生的字符串与实际期望值进行比较。我的想法是抛出一个异常,因为我的内容会随着时间的推移而变化,而且非常大。我想这现在不是一个选项,但这是一个单元测试。结果永远不会改变。只需使用一个带有URI的简单文本文件,并使用文本文件的内容进行测试。您可以在测试资源中添加一个
public
目录,流式输出应该从中获取文本文件。甚至可以通过配置属性配置目录。这就是我要做的这段代码有一个小错误,替换
output.toByteArray()带有
bas.toByteArray()
public void write(OutputStream os) throws IOException,
            WebApplicationException {...}
UriInfo mockInfo = mockUriInfo();
Response response = resource.streamExample(mockInfo);
StreamingOutput output = (StreamingOutput) response.getEntity();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
output.write(baos);
byte[] data = baos.toByteArray();
String s = new String(data, StandardCharsets.UTF_8);
assertThat(s, is("SomeCharacterData"));