testing - 如何模拟 s3ObjectStream
问题描述
我有代码测试如下:
@BeforeEach
static void setup() throws IOException {
Context context = new MockLambdaContext();
mockAmazonS3Client();
}
@Test
@DisplayName("Testing handleRequest returns complete when middle base64 piece")
public void handleRequestTestMiddlePiece() throws IOException {
ApplicationHandler applicationHandler = new ApplicationHandler();
mockAmazonS3Client();
input.replace("tag","middle");
assertEquals("complete", applicationHandler.handleRequest(input, context));
}
public static void mockAmazonS3Client() throws IOException {
AmazonS3Client mockAmazonS3Client = mock(AmazonS3Client.class);
S3Object s3Object = mock(S3Object.class);
S3ObjectInputStream s3ObjectInputStream = mock(S3ObjectInputStream.class);
InputStream testInputStream = new ByteArrayInputStream("Test".getBytes());
when(mockAmazonS3Client.getObject(any(String.class), any(String.class))).thenAnswer(invocationOnMock -> {
return s3Object;
});
when(s3ObjectInputStream.read(any(byte[].class))).thenAnswer(invocation -> {
return testInputStream.read(invocation.getArgument(0));
});
when(s3Object.getObjectContent()).thenReturn(s3ObjectInputStream);
new MockUp<AmazonS3Client>() {
@Mock
public S3Object getObject(String bucketName, String key) throws SdkClientException, AmazonServiceException {
return s3Object;
}
};
new MockUp<AmazonS3Client>() {
@Mock
PutObjectResult putObject(PutObjectRequest var1) throws SdkClientException, AmazonServiceException {
return null;
}
};
new MockUp<AmazonS3Client>() {
@Mock
public S3ObjectInputStream getObjectContent() {
return s3ObjectInputStream;
}
};
}
在 mockAmazonS3Client 中,我模拟了 getObject 使用 mockito 生成的 S3Object 和 S3ObjectStream。我设法使用“何时”让 getObjectContent 调用 S3ObjectStream。但是,当我使用另一个“何时”来模拟读取 S3ObjectSteam 时会发生什么时,它会抛出一个返回 0 字节的异常:
java.io.IOException: Underlying input stream returned zero bytes
尽管我不确定,但由于某种原因,这可能是第二个“何时”失败。任何想法将不胜感激。谢谢。
解决方案
推荐阅读
- c++ - 这种“省略失败”是语言规定的吗?
- corda - 无法使用帐户依赖项构建 cordapp
- python - dpath.utils:TypeError:类型类的对象没有 len()
- docker - KafkaProducer 不读取消息
- r - 1:nrow(SM) 中的错误:元数据文件的长度为 0 的参数
- matlab - 如何用 bvp4c Matlab 求解两个方程?
- unity3d - 在 Unity 中启动游戏时出现“无法启动 Oculus XR 插件”错误
- android-studio - 我可以将默认活动设置为来自不是基本模块的模块的活动吗?
- android - 如何在 SQLite 中实现 FNV-1(a)?
- java - 在 JTable (Java with swing) 上使用事件监听器时,变量有奇怪的行为