java - 如何对 aws lambda 调用进行单元测试?

标签 java unit-testing amazon-web-services junit lambda

我有一个用 Java 编写的 aws lambda RequestHandler,它调用另一个 aws lambda。为了调用另一个 lambda,我编写了一个接口(interface),其中的方法由 @LambdaFunction 注释。要构建调用程序,我使用:

LamdaInvoker lamdaInvoker = LambdaInvokerFactory.builder().lambdaClient(AWSLambdaClientBuilder.defaultClient()).build(LamdaInvoker.class);

当我在没有部署 lambda 的情况下运行 JUnit 测试时,我得到:

java.lang.IllegalArgumentException: No region provided

是否可以在单元测试中模拟调用者?如何模拟?

最佳答案

你可以在你的测试类中尝试类似的东西 -

private LambdaInvocationHandler handler;
private AWSLambda lambda;
private LambdaInvokerFactory factory;
private YourInterface invoker;

@Before
public void setup() {
    lambda = Mockito.mock(AWSLambda.class);
    factory = new LambdaInvokerFactory(lambda, null);
    invoker = factory.build(YourInterface.class);
    handler = (LambdaInvocationHandler) Proxy.getInvocationHandler(invoker);
}

假设你的界面在哪里 -

static interface YourInterface {
    @LambdaFunction
    void someMethod(String arg1);
}

你的测试方法可能是 -

@Test
public void testSomeMethod() throws Exception {
    Method x = getMethod("someMethod", String.class);
    handler.validateInterfaceMethod(someMethod, new Object[] {
            "str"
    });
}

关于java - 如何对 aws lambda 调用进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42601164/

相关文章:

java - getAsync ("key").get(timeout, sec) 不等待,返回 null

javascript - 访问全局变量 JavaScript 单元测试

java - Spring Boot Restcontroller 作为单元测试中的内部类(webmvctest)

ios - 如何在DynamoDB(iOS)中查询StringSet值?

sql-server - 如何从 Amazon RDS 上的 SQL Server 导出/备份数据库

java - 在具有不同索引和大小的数组列表上添加不重复的元素

java - 在 AIX 中配置 JRE,无需 installp

java - 未转义的 java 在正则表达式 matcher.find() 中不匹配

unit-testing - 如何模拟在构造函数 ES6 中调用的 'new Class()' - Jasmine

postgresql - 用缺失日期的数据填充表(postgresql,redshift)