gpt4 book ai didi

java - 如何对将文件写入 AWS Lambda 输出流进行单元测试?

转载 作者:行者123 更新时间:2023-12-02 01:22:04 24 4
gpt4 key购买 nike

我有一个用 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>);

}

}

我已将代码部署到 AWS,因此我知道它可以工作,但我希望为其编写适当的单元测试以供将来构建

最佳答案

您可以创建一个ByteArrayOutputStream,而不是模拟OutputStream。它基本上只是一个实现 OutputStream 的字节数组。然后您可以使用 ByteArrayOutputSteam#toBytes()ByteArrayOutputStream#toString()

验证写入的内容是否正确

关于java - 如何对将文件写入 AWS Lambda 输出流进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57532373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com