【问题标题】:How to unit test aws lambda invokation?如何对aws lambda调用进行单元测试?
【发布时间】:2017-07-24 21:05:44
【问题描述】:

我有一个用 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 以及如何模拟?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 'LambdaInvokerFactory()' has private access in 'com.amazonaws.services.lambda.invoke.LambdaInvokerFactory'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2021-08-19
    • 2019-01-22
    • 1970-01-01
    • 2020-09-15
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多