如何单元测试aws lambda invokation?

时间:2017-03-04 20:40:22

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

我有一个用Java编写的aws lambda RequestHandler,它调用另一个aws lambda。为了调用另一个lambda,我使用@LambdaFunction注释的方法编写了一个接口。要构建一个调用者,我使用:

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

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

java.lang.IllegalArgumentException: No region provided

是否有可能在单元测试中模拟Invoker以及如何?

1 个答案:

答案 0 :(得分:0)

您可以在Test类中尝试这方面的内容 -

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"
    });
}