java—如何单元测试在重试期间是否使用了新的inputstream?

syqv5f0l  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(319)

我有几个方法可以发送http请求将输入流上传到s3。如果对s3的请求失败,则有一种重试策略,尝试在某些状态代码上再次发送请求。因为我们不能保证输入流没有从以前的请求中部分读取,所以在重试时必须提供一个新的输入流。
包含输入流的对象类如下所示:

public class CustomRequest {
private InputStream stream;
private InputStreamProvider inputStreamProvider;
}

其中inputstreamprovider是为在重试时提供全新的输入流而创建的功能接口,如下所示:

public interface InputStreamProvider {
InputStream getInputStream();
}

每个customrequest可以有一个inputstream,这意味着我们不支持重试,也可以有一个inputstreamprovider,我们支持重试。
我的问题是,在使用inputstreamprovider.getinputstream()重试时,如何进行单元测试以确保实际上提供了一个新的输入流?

kpbpu008

kpbpu0081#

你问错问题了。
我的意思是你试图测试错误的东西。输入流是否被重用并不重要,重要的是输入流是否提供了正确的数据。这就是你需要测试的。
读取流并验证输出,即内容。您不关心或测试流是如何实现的,而只关心流是否按照api约定进行操作。
您似乎关心的是一个流上的操作不会影响另一个流返回的数据。所以测试一下。获取一个流,读取其中的一些内容并验证内容。获取另一个流,从中读取不同的量并验证内容。从第一个流读更多,然后从第二个流。保持多路复用,只需验证一个流的读取不会影响另一个流返回的数据。

相关问题