Java 如何单元测试将文件写入AWS Lambda输出流?
我用java实现了一个AWS Lambda。lambda生成一个文件,然后使用Base64编码器将其写入输出。我试图为它编写一个单元测试,但在编写文件时,它会进入一个无限循环 我想做的是捕获单元测试中写入encodedStream的内容,将其写入临时文件夹,然后将内容与预期内容进行比较,但测试将挂起,直到最终抛出内存不足异常 Lambda码Java 如何单元测试将文件写入AWS Lambda输出流?,java,amazon-web-services,aws-lambda,Java,Amazon Web Services,Aws Lambda,我用java实现了一个AWS Lambda。lambda生成一个文件,然后使用Base64编码器将其写入输出。我试图为它编写一个单元测试,但在编写文件时,它会进入一个无限循环 我想做的是捕获单元测试中写入encodedStream的内容,将其写入临时文件夹,然后将内容与预期内容进行比较,但测试将挂起,直到最终抛出内存不足异常 Lambda码 public class MyLambda implements RequestStreamHandler { private static fi
public class MyLambda implements RequestStreamHandler {
private static final Logger LOGGER = LogManager.getLogger(MyLambda.class);
@Override
public void handleRequest(@Nonnull InputStream inputStream, @Nonnull OutputStream outputStream, @Nonnull Context context) {
try (OutputStream encodedStream = Base64.getEncoder().wrap(outputStream);){
encodedStream.write("This is written to file".getBytes());
} catch (IOException e) {
LOGGER.info("IOException occurred ", e);
}
}
}
单元测试
public class MyLambdaTest {
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void testRequest() throws IOException {
MyLambda myLambda = new MyLambda();
InputStream inputStream = mock(InputStream.class);
OutputStream mockOutputStream = mock(OutputStream.class);
Context mockContext = mock(Context.class);
doNothing().when(mockOutputStream).write(anyInt());
doNothing().when(mockOutputStream).write(any(byte[].class));
doNothing().when(mockOutputStream).write(any(byte[].class), anyInt(), anyInt());
myLambda.handleRequest(inputStream, mockOutputStream, mockContext);
FileUtils.writeByteArrayToFile(temporaryFolder.newFile(), <captured bytes>);
}
}
公共类MyLambdaTest{
@统治
public TemporaryFolder TemporaryFolder=新建TemporaryFolder();
@试验
public void testRequest()引发IOException{
MyLambda MyLambda=新的MyLambda();
InputStream InputStream=mock(InputStream.class);
OutputStream mockOutputStream=mock(OutputStream.class);
Context mockContext=mock(Context.class);
doNothing().when(mockOutputStream).write(anyInt());
doNothing().when(mockOutputStream).write(any(byte[].class));
doNothing().when(mockOutputStream).write(any(byte[].class)、anyInt()、anyInt());
handleRequest(inputStream、mockOutputStream、mockContext);
FileUtils.WriteByteArrayFile(临时文件夹.newFile(),);
}
}
我已经将代码部署到AWS,所以我知道它可以工作,但我希望为将来的构建编写一个适当的单元测试
FileOutputStream fout =
new FileOutputStream(temporaryFolder.newFile("testout.txt"));
MyLambda myLambda = new MyLambda();
myLambda.handleRequest(null, fout, null);
fout.close();
嗨,约瑟夫
请在上面找到我的尝试。我使用了一个真正的FileOutputStream
嗨,约瑟夫
请在上面找到我的尝试。我使用了一个真正的
FileOutputStream
而不是模拟OutputStream
,您可以创建一个ByteArrayOutputStream
。它基本上只是一个字节数组,实现了OutputStream
。然后,您可以验证是否使用ByteArrayOutputSteam#toBytes()
,或ByteArrayOutputStream#toString()
编写了正确的内容,而不是模拟输出流
,您可以创建ByteArrayOutputStream
。它基本上只是一个字节数组,实现了OutputStream
。然后您可以验证是否使用ByteArrayOutputSteam#toBytes()
,或ByteArrayOutputStream#toString()
编写了正确的内容。注意:下面两种解决方案都有效,但我标记为已接受答案的方案更接近我想要的解决方案。注意:下面两种解决方案都有效,但我标记为已接受答案的答案更接近我所寻找的答案