java - 如何使用 Java 对 AWS S3 开发工具包的 getObject 方法进行单元测试?
问题描述
我正在使用 Java,并且正在使用 AWS 开发工具包与 S3 进行交互。我有以下方法,我想对其进行单元测试
private final S3Client s3Client;
...
...
public byte[] download(String key) throws IOException {
GetObjectRequest getObjectRequest = GetObjectRequest.builder()
.bucket("myBucket")
.key(key)
.build();
return s3Client.getObject(getObjectRequest).readAllBytes();
}
为此,我使用 JUnit 5 和 Mockito。问题是我不知道如何模拟结果
s3Client.getObject(getObjectRequest)
因为返回类型
ResponseInputStream<GetObjectResponse>
是最后一堂课。
有什么想法或建议吗?谢谢
解决方案
如果有人仍在寻找不同的解决方案,我就是这样做的:
这是需要模拟的代码:
InputStream objectStream =
this.s3Client.getObject(
GetObjectRequest.builder().bucket(bucket).key(key).build(),
ResponseTransformer.toInputStream());
这是如何模拟它:
S3Client s3Client = Mockito.mock(S3Client.class);
String bucket = "bucket";
String key = "key";
InputStream objectStream = getFakeInputStream();
when(s3Client.getObject(
Mockito.any(GetObjectRequest.class),
ArgumentMatchers
.<ResponseTransformer<GetObjectResponse, ResponseInputStream<GetObjectResponse>>>
any()))
.then(
invocation -> {
GetObjectRequest getObjectRequest = invocation.getArgument(0);
assertEquals(bucket, getObjectRequest.bucket());
assertEquals(key, getObjectRequest.key());
return new ResponseInputStream<>(
GetObjectResponse.builder().build(), AbortableInputStream.create(objectStream));
});
推荐阅读
- c++ - 来自 valgrind (Treap) 的错误
- firebase - Firebase/Google Cloud 函数“无法执行 GraphicsMagick/ImageMagick”
- wordpress - 尝试使用 Wordpress 5.8.1 API 上传图像的身份验证错误 - 2021
- c# - Azure 服务总线使用 .net sdk 按 ID 删除队列消息
- generics - 仅添加具有不同具体类型的泛型类型
- mariadb - MariaDB 10.1中通过json键的值查找所有记录
- c++ - 在 C++ 中修改未知元组以添加所有数字对象并连接所有可以转换为字符串的对象
- python - ValueError:输入包含 NaN、无穷大或对于 dtype('float64')-km.fit(x) 来说太大的值
- javascript - 使用输入创建代码?Javascipt 图形用户界面
- python - 如何提取具有附加标签的推文?使用蟒蛇