Java 如何单元测试将文件写入AWS 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

我用java实现了一个AWS Lambda。lambda生成一个文件,然后使用Base64编码器将其写入输出。我试图为它编写一个单元测试,但在编写文件时,它会进入一个无限循环

我想做的是捕获单元测试中写入encodedStream的内容,将其写入临时文件夹,然后将内容与预期内容进行比较,但测试将挂起,直到最终抛出内存不足异常

Lambda码

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()

编写了正确的内容。注意:下面两种解决方案都有效,但我标记为已接受答案的方案更接近我想要的解决方案。注意:下面两种解决方案都有效,但我标记为已接受答案的答案更接近我所寻找的答案